From 481ba6cabe14b54cd4eb3996cd0141bc456195aa Mon Sep 17 00:00:00 2001 From: Mark Brand Date: Thu, 19 Aug 2010 22:16:26 +0200 Subject: upgrade package vmime --- src/vmime-0.9.1-svn-r529-20100210.patch | 9373 ---------------- src/vmime-0.9.1-svn-r533-20100215.patch | 640 -- src/vmime-0.9.1-svn-r534-20100218.patch | 12 - src/vmime-0.9.1-svn-r537-20100310.patch | 65 - src/vmime-0.9.1-svn-r540-20100316.patch | 100 - src/vmime-0.9.1-svn-r542-20100410.patch | 92 - src/vmime-0.9.1-svn-r545-20100504.patch | 77 - src/vmime-0.9.1-svn-r546-20100514.patch | 19 - src/vmime-0.9.1-svn-r551-20100520.patch | 1337 --- src/vmime-0.9.1-svn-r553-20100521.patch | 280 - src/vmime-0.9.1-svn-r555-20100523.patch | 721 -- src/vmime-1-fastforward.patch | 17232 ++++++++++++++++++++++++++++++ 12 files changed, 17232 insertions(+), 12716 deletions(-) delete mode 100644 src/vmime-0.9.1-svn-r529-20100210.patch delete mode 100644 src/vmime-0.9.1-svn-r533-20100215.patch delete mode 100644 src/vmime-0.9.1-svn-r534-20100218.patch delete mode 100644 src/vmime-0.9.1-svn-r537-20100310.patch delete mode 100644 src/vmime-0.9.1-svn-r540-20100316.patch delete mode 100644 src/vmime-0.9.1-svn-r542-20100410.patch delete mode 100644 src/vmime-0.9.1-svn-r545-20100504.patch delete mode 100644 src/vmime-0.9.1-svn-r546-20100514.patch delete mode 100644 src/vmime-0.9.1-svn-r551-20100520.patch delete mode 100644 src/vmime-0.9.1-svn-r553-20100521.patch delete mode 100644 src/vmime-0.9.1-svn-r555-20100523.patch create mode 100644 src/vmime-1-fastforward.patch diff --git a/src/vmime-0.9.1-svn-r529-20100210.patch b/src/vmime-0.9.1-svn-r529-20100210.patch deleted file mode 100644 index 1ae25fd..0000000 --- a/src/vmime-0.9.1-svn-r529-20100210.patch +++ /dev/null @@ -1,9373 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/AUTHORS b/AUTHORS ---- a/AUTHORS 2008-07-11 20:42:32.000000000 +0200 -+++ b/AUTHORS 2010-02-09 14:34:54.000000000 +0100 -@@ -1,17 +1,14 @@ - --VMIME AUTHORS AND CONTRIBUTORS --============================== -+VMIME AUTHOR -+============ - - Vincent Richard --Project originator, design, core implementation. -+Project owner and creator. VMime was created in 1998, and publicly released -+under the GNU GPL license in 2003. - --Pierre Thierry --Patches for STL algorithms. - --Zarafa --Miscellaneous patches. -- --Other contributors: -+VMIME CONTRIBUTORS -+================== - - - Stefan Uhrig - - Rafael Fernandez -@@ -19,4 +16,11 @@ - - Benjamin Biron - - Bertrand Benoit - - Tim Teulings -+ - Georg Sauthoff -+ - Pierre Thierry (patches for STL algorithms) -+ - Zarafa -+ - Bartek Szurgot -+ -+Please apologize if I have forgotten someone here. ;) -+See SVN Changelog for full list. - -diff -urN a/bootstrap b/bootstrap ---- a/bootstrap 2008-10-19 14:35:41.000000000 +0200 -+++ b/bootstrap 2010-02-09 14:34:54.000000000 +0100 -@@ -40,6 +40,7 @@ - || (echo "[NO]" ; cat bootstrap.tmpout ; rm -f bootstrap.tmpout ; not_a_command >& /dev/null) || DIE=1 - fi - -+# Bug with automake 1.10? - touch autotools/config.rpath - - if test $DIE = 0 ; then -diff -urN a/ChangeLog b/ChangeLog ---- a/ChangeLog 2008-10-19 13:57:34.000000000 +0200 -+++ b/ChangeLog 2010-02-09 14:34:54.000000000 +0100 -@@ -1,4 +1,17 @@ - -+VERSION 0.9.1svn -+================ -+ -+2009-09-06 Vincent Richard -+ -+ * Relicensed VMime under the GNU GPL license version 3. Dual licensing -+ is now available. More info here: http://www.vmime.org/pages/Licensing -+ -+2008-10-19 Vincent Richard -+ -+ * Started version 0.9.1. -+ -+ - VERSION 0.9.0 - ============= - -diff -urN a/COPYING b/COPYING ---- a/COPYING 2008-01-05 18:49:22.000000000 +0100 -+++ b/COPYING 2010-02-09 14:34:54.000000000 +0100 -@@ -1,285 +1,626 @@ -- GNU GENERAL PUBLIC LICENSE -- Version 2, June 1991 -+ GNU GENERAL PUBLIC LICENSE -+ Version 3, 29 June 2007 - -- Copyright (C) 1989, 1991 Free Software Foundation, Inc. -- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -- Preamble -+ 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 -+ The GNU General Public License is a free, copyleft license for -+software and other kinds of works. -+ -+ The licenses for most software and other practical works are designed -+to take away your freedom to share and change the works. By contrast, -+the GNU General Public License is intended to guarantee your freedom to -+share and change all versions of a program--to make sure it remains free -+software for all its users. We, the Free Software Foundation, use the -+GNU General Public License for most of our software; it applies also to -+any other work released this way by its authors. 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. -+them 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 prevent others from denying you -+these rights or asking you to surrender the rights. Therefore, you have -+certain responsibilities if you distribute copies of the software, or if -+you modify it: responsibilities to respect the freedom of others. - - 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. -+gratis or for a fee, you must pass on to the recipients the same -+freedoms that you received. 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. -+ -+ Developers that use the GNU GPL protect your rights with two steps: -+(1) assert copyright on the software, and (2) offer you this License -+giving you legal permission to copy, distribute and/or modify it. -+ -+ For the developers' and authors' protection, the GPL clearly explains -+that there is no warranty for this free software. For both users' and -+authors' sake, the GPL requires that modified versions be marked as -+changed, so that their problems will not be attributed erroneously to -+authors of previous versions. -+ -+ Some devices are designed to deny users access to install or run -+modified versions of the software inside them, although the manufacturer -+can do so. This is fundamentally incompatible with the aim of -+protecting users' freedom to change the software. The systematic -+pattern of such abuse occurs in the area of products for individuals to -+use, which is precisely where it is most unacceptable. Therefore, we -+have designed this version of the GPL to prohibit the practice for those -+products. If such problems arise substantially in other domains, we -+stand ready to extend this provision to those domains in future versions -+of the GPL, as needed to protect the freedom of users. -+ -+ Finally, every program is threatened constantly by software patents. -+States should not allow patents to restrict development and use of -+software on general-purpose computers, but in those that do, we wish to -+avoid the special danger that patents applied to a free program could -+make it effectively proprietary. To prevent this, the GPL assures that -+patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and - modification follow. -- -- GNU GENERAL PUBLIC LICENSE -- 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 -+ -+ TERMS AND CONDITIONS -+ -+ 0. Definitions. -+ -+ "This License" refers to version 3 of the GNU General Public License. -+ -+ "Copyright" also means copyright-like laws that apply to other kinds of -+works, such as semiconductor masks. -+ -+ "The Program" refers to any copyrightable work licensed under this -+License. Each licensee is addressed as "you". "Licensees" and -+"recipients" may be individuals or organizations. -+ -+ To "modify" a work means to copy from or adapt all or part of the work -+in a fashion requiring copyright permission, other than the making of an -+exact copy. The resulting work is called a "modified version" of the -+earlier work or a work "based on" the earlier work. -+ -+ A "covered work" means either the unmodified Program or a work based -+on the Program. -+ -+ To "propagate" a work means to do anything with it that, without -+permission, would make you directly or secondarily liable for -+infringement under applicable copyright law, except executing it on a -+computer or modifying a private copy. Propagation includes copying, -+distribution (with or without modification), making available to the -+public, and in some countries other activities as well. -+ -+ To "convey" a work means any kind of propagation that enables other -+parties to make or receive copies. Mere interaction with a user through -+a computer network, with no transfer of a copy, is not conveying. -+ -+ An interactive user interface displays "Appropriate Legal Notices" -+to the extent that it includes a convenient and prominently visible -+feature that (1) displays an appropriate copyright notice, and (2) -+tells the user that there is no warranty for the work (except to the -+extent that warranties are provided), that licensees may convey the -+work under this License, and how to view a copy of this License. If -+the interface presents a list of user commands or options, such as a -+menu, a prominent item in the list meets this criterion. -+ -+ 1. Source Code. -+ -+ The "source code" for a work means the preferred form of the work -+for making modifications to it. "Object code" means any non-source -+form of a work. -+ -+ A "Standard Interface" means an interface that either is an official -+standard defined by a recognized standards body, or, in the case of -+interfaces specified for a particular programming language, one that -+is widely used among developers working in that language. -+ -+ The "System Libraries" of an executable work include anything, other -+than the work as a whole, that (a) is included in the normal form of -+packaging a Major Component, but which is not part of that Major -+Component, and (b) serves only to enable use of the work with that -+Major Component, or to implement a Standard Interface for which an -+implementation is available to the public in source code form. A -+"Major Component", in this context, means a major essential component -+(kernel, window system, and so on) of the specific operating system -+(if any) on which the executable work runs, or a compiler used to -+produce the work, or an object code interpreter used to run it. -+ -+ The "Corresponding Source" for a work in object code form means all -+the source code needed to generate, install, and (for an executable -+work) run the object code and to modify the work, including scripts to -+control those activities. However, it does not include the work's -+System Libraries, or general-purpose tools or generally available free -+programs which are used unmodified in performing those activities but -+which are not part of the work. For example, Corresponding Source -+includes interface definition files associated with source files for -+the work, and the source code for shared libraries and dynamically -+linked subprograms that the work is specifically designed to require, -+such as by intimate data communication or control flow between those -+subprograms and other parts of the work. -+ -+ The Corresponding Source need not include anything that users -+can regenerate automatically from other parts of the Corresponding -+Source. -+ -+ The Corresponding Source for a work in source code form is that -+same work. -+ -+ 2. Basic Permissions. -+ -+ All rights granted under this License are granted for the term of -+copyright on the Program, and are irrevocable provided the stated -+conditions are met. This License explicitly affirms your unlimited -+permission to run the unmodified Program. The output from running a -+covered work is covered by this License only if the output, given its -+content, constitutes a covered work. This License acknowledges your -+rights of fair use or other equivalent, as provided by copyright law. -+ -+ You may make, run and propagate covered works that you do not -+convey, without conditions so long as your license otherwise remains -+in force. You may convey covered works to others for the sole purpose -+of having them make modifications exclusively for you, or provide you -+with facilities for running those works, provided that you comply with -+the terms of this License in conveying all material for which you do -+not control copyright. Those thus making or running the covered works -+for you must do so exclusively on your behalf, under your direction -+and control, on terms that prohibit them from making any copies of -+your copyrighted material outside their relationship with you. -+ -+ Conveying under any other circumstances is permitted solely under -+the conditions stated below. Sublicensing is not allowed; section 10 -+makes it unnecessary. -+ -+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. -+ -+ No covered work shall be deemed part of an effective technological -+measure under any applicable law fulfilling obligations under article -+11 of the WIPO copyright treaty adopted on 20 December 1996, or -+similar laws prohibiting or restricting circumvention of such -+measures. -+ -+ When you convey a covered work, you waive any legal power to forbid -+circumvention of technological measures to the extent such circumvention -+is effected by exercising rights under this License with respect to -+the covered work, and you disclaim any intention to limit operation or -+modification of the work as a means of enforcing, against the work's -+users, your or third parties' legal rights to forbid circumvention of -+technological measures. -+ -+ 4. Conveying Verbatim Copies. -+ -+ You may convey 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; -+keep intact all notices stating that this License and any -+non-permissive terms added in accord with section 7 apply to the code; -+keep intact all notices of the absence of any warranty; and give all -+recipients a copy of this License along with the Program. -+ -+ You may charge any price or no price for each copy that you convey, -+and you may offer support or warranty protection for a fee. -+ -+ 5. Conveying Modified Source Versions. -+ -+ You may convey a work based on the Program, or the modifications to -+produce it from the Program, in the form of source code under the -+terms of section 4, provided that you also meet all of these conditions: -+ -+ a) The work must carry prominent notices stating that you modified -+ it, and giving a relevant date. -+ -+ b) The work must carry prominent notices stating that it is -+ released under this License and any conditions added under section -+ 7. This requirement modifies the requirement in section 4 to -+ "keep intact all notices". -+ -+ c) You must license the entire work, as a whole, under this -+ License to anyone who comes into possession of a copy. This -+ License will therefore apply, along with any applicable section 7 -+ additional terms, to the whole of the work, and all its parts, -+ regardless of how they are packaged. This License gives no -+ permission to license the work in any other way, but it does not -+ invalidate such permission if you have separately received it. -+ -+ d) If the work has interactive user interfaces, each must display -+ Appropriate Legal Notices; however, if the Program has interactive -+ interfaces that do not display Appropriate Legal Notices, your -+ work need not make them do so. -+ -+ A compilation of a covered work with other separate and independent -+works, which are not by their nature extensions of the covered work, -+and which are not combined with it such as to form a larger program, -+in or on a volume of a storage or distribution medium, is called an -+"aggregate" if the compilation and its resulting copyright are not -+used to limit the access or legal rights of the compilation's users -+beyond what the individual works permit. Inclusion of a covered work -+in an aggregate does not cause this License to apply to the other -+parts of the aggregate. -+ -+ 6. Conveying Non-Source Forms. -+ -+ You may convey a covered work in object code form under the terms -+of sections 4 and 5, provided that you also convey the -+machine-readable Corresponding Source under the terms of this License, -+in one of these ways: -+ -+ a) Convey the object code in, or embodied in, a physical product -+ (including a physical distribution medium), accompanied by the -+ Corresponding Source fixed on a durable physical medium -+ customarily used for software interchange. -+ -+ b) Convey the object code in, or embodied in, a physical product -+ (including a physical distribution medium), accompanied by a -+ written offer, valid for at least three years and valid for as -+ long as you offer spare parts or customer support for that product -+ model, to give anyone who possesses the object code either (1) a -+ copy of the Corresponding Source for all the software in the -+ product that is covered by this License, on a durable physical -+ medium customarily used for software interchange, for a price no -+ more than your reasonable cost of physically performing this -+ conveying of source, or (2) access to copy the -+ Corresponding Source from a network server at no charge. -+ -+ c) Convey individual copies of the object code with a copy of the -+ written offer to provide the Corresponding Source. This -+ alternative is allowed only occasionally and noncommercially, and -+ only if you received the object code with such an offer, in accord -+ with subsection 6b. -+ -+ d) Convey the object code by offering access from a designated -+ place (gratis or for a charge), and offer equivalent access to the -+ Corresponding Source in the same way through the same place at no -+ further charge. You need not require recipients to copy the -+ Corresponding Source along with the object code. If the place to -+ copy the object code is a network server, the Corresponding Source -+ may be on a different server (operated by you or a third party) -+ that supports equivalent copying facilities, provided you maintain -+ clear directions next to the object code saying where to find the -+ Corresponding Source. Regardless of what server hosts the -+ Corresponding Source, you remain obligated to ensure that it is -+ available for as long as needed to satisfy these requirements. -+ -+ e) Convey the object code using peer-to-peer transmission, provided -+ you inform other peers where the object code and Corresponding -+ Source of the work are being offered to the general public at no -+ charge under subsection 6d. -+ -+ A separable portion of the object code, whose source code is excluded -+from the Corresponding Source as a System Library, need not be -+included in conveying the object code work. -+ -+ A "User Product" is either (1) a "consumer product", which means any -+tangible personal property which is normally used for personal, family, -+or household purposes, or (2) anything designed or sold for incorporation -+into a dwelling. In determining whether a product is a consumer product, -+doubtful cases shall be resolved in favor of coverage. For a particular -+product received by a particular user, "normally used" refers to a -+typical or common use of that class of product, regardless of the status -+of the particular user or of the way in which the particular user -+actually uses, or expects or is expected to use, the product. A product -+is a consumer product regardless of whether the product has substantial -+commercial, industrial or non-consumer uses, unless such uses represent -+the only significant mode of use of the product. -+ -+ "Installation Information" for a User Product means any methods, -+procedures, authorization keys, or other information required to install -+and execute modified versions of a covered work in that User Product from -+a modified version of its Corresponding Source. The information must -+suffice to ensure that the continued functioning of the modified object -+code is in no case prevented or interfered with solely because -+modification has been made. -+ -+ If you convey an object code work under this section in, or with, or -+specifically for use in, a User Product, and the conveying occurs as -+part of a transaction in which the right of possession and use of the -+User Product is transferred to the recipient in perpetuity or for a -+fixed term (regardless of how the transaction is characterized), the -+Corresponding Source conveyed under this section must be accompanied -+by the Installation Information. But this requirement does not apply -+if neither you nor any third party retains the ability to install -+modified object code on the User Product (for example, the work has -+been installed in ROM). -+ -+ The requirement to provide Installation Information does not include a -+requirement to continue to provide support service, warranty, or updates -+for a work that has been modified or installed by the recipient, or for -+the User Product in which it has been modified or installed. Access to a -+network may be denied when the modification itself materially and -+adversely affects the operation of the network or violates the rules and -+protocols for communication across the network. -+ -+ Corresponding Source conveyed, and Installation Information provided, -+in accord with this section must be in a format that is publicly -+documented (and with an implementation available to the public in -+source code form), and must require no special password or key for -+unpacking, reading or copying. -+ -+ 7. Additional Terms. -+ -+ "Additional permissions" are terms that supplement the terms of this -+License by making exceptions from one or more of its conditions. -+Additional permissions that are applicable to the entire Program shall -+be treated as though they were included in this License, to the extent -+that they are valid under applicable law. If additional permissions -+apply only to part of the Program, that part may be used separately -+under those permissions, but the entire Program remains governed by -+this License without regard to the additional permissions. -+ -+ When you convey a copy of a covered work, you may at your option -+remove any additional permissions from that copy, or from any part of -+it. (Additional permissions may be written to require their own -+removal in certain cases when you modify the work.) You may place -+additional permissions on material, added by you to a covered work, -+for which you have or can give appropriate copyright permission. -+ -+ Notwithstanding any other provision of this License, for material you -+add to a covered work, you may (if authorized by the copyright holders of -+that material) supplement the terms of this License with terms: -+ -+ a) Disclaiming warranty or limiting liability differently from the -+ terms of sections 15 and 16 of this License; or -+ -+ b) Requiring preservation of specified reasonable legal notices or -+ author attributions in that material or in the Appropriate Legal -+ Notices displayed by works containing it; or -+ -+ c) Prohibiting misrepresentation of the origin of that material, or -+ requiring that modified versions of such material be marked in -+ reasonable ways as different from the original version; or -+ -+ d) Limiting the use for publicity purposes of names of licensors or -+ authors of the material; or -+ -+ e) Declining to grant rights under trademark law for use of some -+ trade names, trademarks, or service marks; or -+ -+ f) Requiring indemnification of licensors and authors of that -+ material by anyone who conveys the material (or modified versions of -+ it) with contractual assumptions of liability to the recipient, for -+ any liability that these contractual assumptions directly impose on -+ those licensors and authors. -+ -+ All other non-permissive additional terms are considered "further -+restrictions" within the meaning of section 10. If the Program as you -+received it, or any part of it, contains a notice stating that it is -+governed by this License along with a term that is a further -+restriction, you may remove that term. If a license document contains -+a further restriction but permits relicensing or conveying under this -+License, you may add to a covered work material governed by the terms -+of that license document, provided that the further restriction does -+not survive such relicensing or conveying. -+ -+ If you add terms to a covered work in accord with this section, you -+must place, in the relevant source files, a statement of the -+additional terms that apply to those files, or a notice indicating -+where to find the applicable terms. -+ -+ Additional terms, permissive or non-permissive, may be stated in the -+form of a separately written license, or stated as exceptions; -+the above requirements apply either way. -+ -+ 8. Termination. -+ -+ You may not propagate or modify a covered work except as expressly -+provided under this License. Any attempt otherwise to propagate or -+modify it is void, and will automatically terminate your rights under -+this License (including any patent licenses granted under the third -+paragraph of section 11). -+ -+ However, if you cease all violation of this License, then your -+license from a particular copyright holder is reinstated (a) -+provisionally, unless and until the copyright holder explicitly and -+finally terminates your license, and (b) permanently, if the copyright -+holder fails to notify you of the violation by some reasonable means -+prior to 60 days after the cessation. -+ -+ Moreover, your license from a particular copyright holder is -+reinstated permanently if the copyright holder notifies you of the -+violation by some reasonable means, this is the first time you have -+received notice of violation of this License (for any work) from that -+copyright holder, and you cure the violation prior to 30 days after -+your receipt of the notice. -+ -+ Termination of your rights under this section does not terminate the -+licenses of parties who have received copies or rights from you under -+this License. If your rights have been terminated and not permanently -+reinstated, you do not qualify to receive new licenses for the same -+material under section 10. -+ -+ 9. Acceptance Not Required for Having Copies. -+ -+ You are not required to accept this License in order to receive or -+run a copy of the Program. Ancillary propagation of a covered work -+occurring solely as a consequence of using peer-to-peer transmission -+to receive a copy likewise does not require acceptance. However, -+nothing other than this License grants you permission to propagate or -+modify any covered work. These actions infringe copyright if you do -+not accept this License. Therefore, by modifying or propagating a -+covered work, you indicate your acceptance of this License to do so. -+ -+ 10. Automatic Licensing of Downstream Recipients. -+ -+ Each time you convey a covered work, the recipient automatically -+receives a license from the original licensors, to run, modify and -+propagate that work, subject to this License. You are not responsible -+for enforcing compliance by third parties with this License. -+ -+ An "entity transaction" is a transaction transferring control of an -+organization, or substantially all assets of one, or subdividing an -+organization, or merging organizations. If propagation of a covered -+work results from an entity transaction, each party to that -+transaction who receives a copy of the work also receives whatever -+licenses to the work the party's predecessor in interest had or could -+give under the previous paragraph, plus a right to possession of the -+Corresponding Source of the work from the predecessor in interest, if -+the predecessor has it or can get it with reasonable efforts. -+ -+ You may not impose any further restrictions on the exercise of the -+rights granted or affirmed under this License. For example, you may -+not impose a license fee, royalty, or other charge for exercise of -+rights granted under this License, and you may not initiate litigation -+(including a cross-claim or counterclaim in a lawsuit) alleging that -+any patent claim is infringed by making, using, selling, offering for -+sale, or importing the Program or any portion of it. -+ -+ 11. Patents. -+ -+ A "contributor" is a copyright holder who authorizes use under this -+License of the Program or a work on which the Program is based. The -+work thus licensed is called the contributor's "contributor version". -+ -+ A contributor's "essential patent claims" are all patent claims -+owned or controlled by the contributor, whether already acquired or -+hereafter acquired, that would be infringed by some manner, permitted -+by this License, of making, using, or selling its contributor version, -+but do not include claims that would be infringed only as a -+consequence of further modification of the contributor version. For -+purposes of this definition, "control" includes the right to grant -+patent sublicenses in a manner consistent with the requirements of - 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 -+ Each contributor grants you a non-exclusive, worldwide, royalty-free -+patent license under the contributor's essential patent claims, to -+make, use, sell, offer for sale, import and otherwise run, modify and -+propagate the contents of its contributor version. -+ -+ In the following three paragraphs, a "patent license" is any express -+agreement or commitment, however denominated, not to enforce a patent -+(such as an express permission to practice a patent or covenant not to -+sue for patent infringement). To "grant" such a patent license to a -+party means to make such an agreement or commitment not to enforce a -+patent against the party. -+ -+ If you convey a covered work, knowingly relying on a patent license, -+and the Corresponding Source of the work is not available for anyone -+to copy, free of charge and under the terms of this License, through a -+publicly available network server or other readily accessible means, -+then you must either (1) cause the Corresponding Source to be so -+available, or (2) arrange to deprive yourself of the benefit of the -+patent license for this particular work, or (3) arrange, in a manner -+consistent with the requirements of this License, to extend the patent -+license to downstream recipients. "Knowingly relying" means you have -+actual knowledge that, but for the patent license, your conveying the -+covered work in a country, or your recipient's use of the covered work -+in a country, would infringe one or more identifiable patents in that -+country that you have reason to believe are valid. -+ -+ If, pursuant to or in connection with a single transaction or -+arrangement, you convey, or propagate by procuring conveyance of, a -+covered work, and grant a patent license to some of the parties -+receiving the covered work authorizing them to use, propagate, modify -+or convey a specific copy of the covered work, then the patent license -+you grant is automatically extended to all recipients of the covered -+work and works based on it. -+ -+ A patent license is "discriminatory" if it does not include within -+the scope of its coverage, prohibits the exercise of, or is -+conditioned on the non-exercise of one or more of the rights that are -+specifically granted under this License. You may not convey a covered -+work if you are a party to an arrangement with a third party that is -+in the business of distributing software, under which you make payment -+to the third party based on the extent of your activity of conveying -+the work, and under which the third party grants, to any of the -+parties who would receive the covered work from you, a discriminatory -+patent license (a) in connection with copies of the covered work -+conveyed by you (or copies made from those copies), or (b) primarily -+for and in connection with specific products or compilations that -+contain the covered work, unless you entered into that arrangement, -+or that patent license was granted, prior to 28 March 2007. -+ -+ Nothing in this License shall be construed as excluding or limiting -+any implied license or other defenses to infringement that may -+otherwise be available to you under applicable patent law. -+ -+ 12. No Surrender of Others' Freedom. -+ -+ If 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. -+excuse you from the conditions of this License. If you cannot convey a -+covered work so as to satisfy simultaneously your obligations under this -+License and any other pertinent obligations, then as a consequence you may -+not convey it at all. For example, if you agree to terms that obligate you -+to collect a royalty for further conveying from those to whom you convey -+the Program, the only way you could satisfy both those terms and this -+License would be to refrain entirely from conveying the Program. -+ -+ 13. Use with the GNU Affero General Public License. -+ -+ Notwithstanding any other provision of this License, you have -+permission to link or combine any covered work with a work licensed -+under version 3 of the GNU Affero General Public License into a single -+combined work, and to convey the resulting work. The terms of this -+License will continue to apply to the part which is the covered work, -+but the special requirements of the GNU Affero General Public License, -+section 13, concerning interaction through a network will apply to the -+combination as such. -+ -+ 14. Revised Versions 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 -+ The Free Software Foundation may publish revised and/or new versions of -+the GNU 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 -+ Each version is given a distinguishing version number. If the -+Program specifies that a certain numbered version of the GNU General -+Public License "or any later version" applies to it, you have the -+option of following the terms and conditions either of that numbered -+version or of any later version published by the Free Software -+Foundation. If the Program does not specify a version number of the -+GNU General Public License, you may choose any version ever published -+by the Free Software Foundation. -+ -+ If the Program specifies that a proxy can decide which future -+versions of the GNU General Public License can be used, that proxy's -+public statement of acceptance of a version permanently authorizes you -+to choose that version for the Program. -+ -+ Later license versions may give you additional or different -+permissions. However, no additional obligations are imposed on any -+author or copyright holder as a result of your choosing to follow a -+later version. -+ -+ 15. Disclaimer of Warranty. -+ -+ 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. -+ -+ 16. Limitation of Liability. -+ -+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -+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. -+ -+ 17. Interpretation of Sections 15 and 16. -+ -+ If the disclaimer of warranty and limitation of liability provided -+above cannot be given local legal effect according to their terms, -+reviewing courts shall apply local law that most closely approximates -+an absolute waiver of all civil liability in connection with the -+Program, unless a warranty or assumption of liability accompanies a -+copy of the Program in return for a fee. -+ -+ 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 -@@ -287,15 +628,15 @@ - - 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 -+state the exclusion of warranty; and each file should have at least - the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - -- This program is free software; you can redistribute it and/or modify -+ 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 -+ the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, -@@ -304,37 +645,30 @@ - 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- -+ along with this program. If not, see . - - 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: -+ If the program does terminal interaction, 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'. -+ Copyright (C) -+ This program 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. -- -- , 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. -+parts of the General Public License. Of course, your program's commands -+might be different; for a GUI interface, you would use an "about box". -+ -+ You should also get your employer (if you work as a programmer) or school, -+if any, to sign a "copyright disclaimer" for the program, if necessary. -+For more information on this, and how to apply and follow the GNU GPL, see -+. -+ -+ The GNU 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 Lesser General -+Public License instead of this License. But first, please read -+. -diff -urN a/examples/example1.cpp b/examples/example1.cpp ---- a/examples/example1.cpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/examples/example1.cpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/examples/example2.cpp b/examples/example2.cpp ---- a/examples/example2.cpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/examples/example2.cpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/examples/example3.cpp b/examples/example3.cpp ---- a/examples/example3.cpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/examples/example3.cpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/examples/example4.cpp b/examples/example4.cpp ---- a/examples/example4.cpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/examples/example4.cpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/examples/example5.cpp b/examples/example5.cpp ---- a/examples/example5.cpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/examples/example5.cpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/examples/example6.cpp b/examples/example6.cpp ---- a/examples/example6.cpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/examples/example6.cpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/examples/example7.cpp b/examples/example7.cpp ---- a/examples/example7.cpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/examples/example7.cpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/INSTALL b/INSTALL ---- a/INSTALL 2008-10-19 14:36:21.000000000 +0200 -+++ b/INSTALL 2010-02-10 11:06:52.000000000 +0100 -@@ -2,15 +2,15 @@ - ************************* - - Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, --2006, 2007 Free Software Foundation, Inc. -+2006, 2007, 2008, 2009 Free Software Foundation, Inc. - --This file is free documentation; the Free Software Foundation gives -+ This file is free documentation; the Free Software Foundation gives - unlimited permission to copy, distribute and modify it. - - Basic Installation - ================== - --Briefly, the shell commands `./configure; make; make install' should -+ Briefly, the shell commands `./configure; make; make install' should - configure, build, and install this package. The following - more-detailed instructions are generic; see the `README' file for - instructions specific to this package. -@@ -73,9 +73,9 @@ - Compilers and Options - ===================== - --Some systems require unusual options for compilation or linking that the --`configure' script does not know about. Run `./configure --help' for --details on some of the pertinent environment variables. -+ Some systems require unusual options for compilation or linking that -+the `configure' script does not know about. Run `./configure --help' -+for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters - by setting variables in the command line or in the environment. Here -@@ -88,7 +88,7 @@ - Compiling For Multiple Architectures - ==================================== - --You can compile the package for more than one kind of computer at the -+ You can compile the package for more than one kind of computer at the - same time, by placing the object files for each architecture in their - own directory. To do this, you can use GNU `make'. `cd' to the - directory where you want the object files and executables to go and run -@@ -100,10 +100,24 @@ - installed the package for one architecture, use `make distclean' before - reconfiguring for another architecture. - -+ On MacOS X 10.5 and later systems, you can create libraries and -+executables that work on multiple system types--known as "fat" or -+"universal" binaries--by specifying multiple `-arch' options to the -+compiler but only a single `-arch' option to the preprocessor. Like -+this: -+ -+ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -+ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ -+ CPP="gcc -E" CXXCPP="g++ -E" -+ -+ This is not guaranteed to produce working output in all cases, you -+may have to build one architecture at a time and combine the results -+using the `lipo' tool if you have problems. -+ - Installation Names - ================== - --By default, `make install' installs the package's commands under -+ By default, `make install' installs the package's commands under - `/usr/local/bin', include files under `/usr/local/include', etc. You - can specify an installation prefix other than `/usr/local' by giving - `configure' the option `--prefix=PREFIX'. -@@ -126,7 +140,7 @@ - Optional Features - ================= - --Some packages pay attention to `--enable-FEATURE' options to -+ Some packages pay attention to `--enable-FEATURE' options to - `configure', where FEATURE indicates an optional part of the package. - They may also pay attention to `--with-PACKAGE' options, where PACKAGE - is something like `gnu-as' or `x' (for the X Window System). The -@@ -138,14 +152,46 @@ - you can use the `configure' options `--x-includes=DIR' and - `--x-libraries=DIR' to specify their locations. - -+Particular systems -+================== -+ -+ On HP-UX, the default C compiler is not ANSI C compatible. If GNU -+CC is not installed, it is recommended to use the following options in -+order to use an ANSI C compiler: -+ -+ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" -+ -+and if that doesn't work, install pre-built binaries of GCC for HP-UX. -+ -+ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -+parse its `' header file. The option `-nodtk' can be used as -+a workaround. If GNU CC is not installed, it is therefore recommended -+to try -+ -+ ./configure CC="cc" -+ -+and if that doesn't work, try -+ -+ ./configure CC="cc -nodtk" -+ -+ On Solaris, don't put `/usr/ucb' early in your `PATH'. This -+directory contains several dysfunctional programs; working variants of -+these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -+in your `PATH', put it _after_ `/usr/bin'. -+ -+ On Haiku, software installed for all users goes in `/boot/common', -+not `/usr/local'. It is recommended to use the following options: -+ -+ ./configure --prefix=/boot/common -+ - Specifying the System Type - ========================== - --There may be some features `configure' cannot figure out automatically, --but needs to determine by the type of machine the package will run on. --Usually, assuming the package is built to be run on the _same_ --architectures, `configure' can figure that out, but if it prints a --message saying it cannot guess the machine type, give it the -+ There may be some features `configure' cannot figure out -+automatically, but needs to determine by the type of machine the package -+will run on. Usually, assuming the package is built to be run on the -+_same_ architectures, `configure' can figure that out, but if it prints -+a message saying it cannot guess the machine type, give it the - `--build=TYPE' option. TYPE can either be a short name for the system - type, such as `sun4', or a canonical name which has the form: - -@@ -153,7 +199,8 @@ - - where SYSTEM can have one of these forms: - -- OS KERNEL-OS -+ OS -+ KERNEL-OS - - See the file `config.sub' for the possible values of each field. If - `config.sub' isn't included in this package, then this package doesn't -@@ -171,9 +218,9 @@ - Sharing Defaults - ================ - --If you want to set default values for `configure' scripts to share, you --can create a site shell script called `config.site' that gives default --values for variables like `CC', `cache_file', and `prefix'. -+ If you want to set default values for `configure' scripts to share, -+you can create a site shell script called `config.site' that gives -+default values for variables like `CC', `cache_file', and `prefix'. - `configure' looks for `PREFIX/share/config.site' if it exists, then - `PREFIX/etc/config.site' if it exists. Or, you can set the - `CONFIG_SITE' environment variable to the location of the site script. -@@ -182,7 +229,7 @@ - Defining Variables - ================== - --Variables not defined in a site shell script can be set in the -+ Variables not defined in a site shell script can be set in the - environment passed to `configure'. However, some packages may run - configure again during the build, and the customized values of these - variables may be lost. In order to avoid this problem, you should set -@@ -201,11 +248,19 @@ - `configure' Invocation - ====================== - --`configure' recognizes the following options to control how it operates. -+ `configure' recognizes the following options to control how it -+operates. - - `--help' - `-h' -- Print a summary of the options to `configure', and exit. -+ Print a summary of all of the options to `configure', and exit. -+ -+`--help=short' -+`--help=recursive' -+ Print a summary of the options unique to this package's -+ `configure', and exit. The `short' variant lists options used -+ only in the top level, while the `recursive' variant lists options -+ also present in any nested packages. - - `--version' - `-V' -@@ -232,6 +287,16 @@ - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -+`--prefix=DIR' -+ Use DIR as the installation prefix. *Note Installation Names:: -+ for more details, including other options available for fine-tuning -+ the installation locations. -+ -+`--no-create' -+`-n' -+ Run the configure checks, but stop before creating any output -+ files. -+ - `configure' also accepts some other, not widely useful, options. Run - `configure --help' for more details. - -diff -urN a/m4/acx_pthread.m4 b/m4/acx_pthread.m4 ---- a/m4/acx_pthread.m4 1970-01-01 01:00:00.000000000 +0100 -+++ b/m4/acx_pthread.m4 2010-02-09 14:34:51.000000000 +0100 -@@ -0,0 +1,235 @@ -+dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -+dnl -+dnl This macro figures out how to build C programs using POSIX threads. -+dnl It sets the PTHREAD_LIBS output variable to the threads library and -+dnl linker flags, and the PTHREAD_CFLAGS output variable to any special -+dnl C compiler flags that are needed. (The user can also force certain -+dnl compiler flags/libs to be tested by setting these environment -+dnl variables.) -+dnl -+dnl Also sets PTHREAD_CC to any special C compiler that is needed for -+dnl multi-threaded programs (defaults to the value of CC otherwise). -+dnl (This is necessary on AIX to use the special cc_r compiler alias.) -+dnl -+dnl NOTE: You are assumed to not only compile your program with these -+dnl flags, but also link it with them as well. e.g. you should link -+dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS -+dnl $LIBS -+dnl -+dnl If you are only building threads programs, you may wish to use -+dnl these variables in your default LIBS, CFLAGS, and CC: -+dnl -+dnl LIBS="$PTHREAD_LIBS $LIBS" -+dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -+dnl CC="$PTHREAD_CC" -+dnl -+dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute -+dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to -+dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -+dnl -+dnl ACTION-IF-FOUND is a list of shell commands to run if a threads -+dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to -+dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the -+dnl default action will define HAVE_PTHREAD. -+dnl -+dnl Please let the authors know if this macro fails on any platform, or -+dnl if you have any other suggestions or comments. This macro was based -+dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with -+dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros -+dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. -+dnl We are also grateful for the helpful feedback of numerous users. -+dnl -+dnl @category InstalledPackages -+dnl @author Steven G. Johnson -+dnl @version 2005-01-14 -+dnl @license GPLWithACException -+ -+AC_DEFUN([ACX_PTHREAD], [ -+AC_REQUIRE([AC_CANONICAL_HOST]) -+AC_LANG_SAVE -+AC_LANG_C -+acx_pthread_ok=no -+ -+# We used to check for pthread.h first, but this fails if pthread.h -+# requires special compiler flags (e.g. on True64 or Sequent). -+# It gets checked for in the link test anyway. -+ -+# First of all, check if the user has set any of the PTHREAD_LIBS, -+# etcetera environment variables, and if threads linking works using -+# them: -+if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then -+ save_CFLAGS="$CFLAGS" -+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -+ save_LIBS="$LIBS" -+ LIBS="$PTHREAD_LIBS $LIBS" -+ AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) -+ AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) -+ AC_MSG_RESULT($acx_pthread_ok) -+ if test x"$acx_pthread_ok" = xno; then -+ PTHREAD_LIBS="" -+ PTHREAD_CFLAGS="" -+ fi -+ LIBS="$save_LIBS" -+ CFLAGS="$save_CFLAGS" -+fi -+ -+# We must check for the threads library under a number of different -+# names; the ordering is very important because some systems -+# (e.g. DEC) have both -lpthread and -lpthreads, where one of the -+# libraries is broken (non-POSIX). -+ -+# Create a list of thread flags to try. Items starting with a "-" are -+# C compiler flags, and other items are library names, except for "none" -+# which indicates that we try without any flags at all, and "pthread-config" -+# which is a program returning the flags for the Pth emulation library. -+ -+acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" -+ -+# The ordering *is* (sometimes) important. Some notes on the -+# individual items follow: -+ -+# pthreads: AIX (must check this before -lpthread) -+# none: in case threads are in libc; should be tried before -Kthread and -+# other compiler flags to prevent continual compiler warnings -+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -+# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -+# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) -+# -pthreads: Solaris/gcc -+# -mthreads: Mingw32/gcc, Lynx/gcc -+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -+# doesn't hurt to check since this sometimes defines pthreads too; -+# also defines -D_REENTRANT) -+# pthread: Linux, etcetera -+# --thread-safe: KAI C++ -+# pthread-config: use pthread-config program (for GNU Pth library) -+ -+case "${host_cpu}-${host_os}" in -+ *solaris*) -+ -+ # On Solaris (at least, for some versions), libc contains stubbed -+ # (non-functional) versions of the pthreads routines, so link-based -+ # tests will erroneously succeed. (We need to link with -pthread or -+ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather -+ # a function called by this macro, so we could check for that, but -+ # who knows whether they'll stub that too in a future libc.) So, -+ # we'll just look for -pthreads and -lpthread first: -+ -+ acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" -+ ;; -+esac -+ -+if test x"$acx_pthread_ok" = xno; then -+for flag in $acx_pthread_flags; do -+ -+ case $flag in -+ none) -+ AC_MSG_CHECKING([whether pthreads work without any flags]) -+ ;; -+ -+ -*) -+ AC_MSG_CHECKING([whether pthreads work with $flag]) -+ PTHREAD_CFLAGS="$flag" -+ ;; -+ -+ pthread-config) -+ AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) -+ if test x"$acx_pthread_config" = xno; then continue; fi -+ PTHREAD_CFLAGS="`pthread-config --cflags`" -+ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" -+ ;; -+ -+ *) -+ AC_MSG_CHECKING([for the pthreads library -l$flag]) -+ PTHREAD_LIBS="-l$flag" -+ ;; -+ esac -+ -+ save_LIBS="$LIBS" -+ save_CFLAGS="$CFLAGS" -+ LIBS="$PTHREAD_LIBS $LIBS" -+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -+ -+ # Check for various functions. We must include pthread.h, -+ # since some functions may be macros. (On the Sequent, we -+ # need a special flag -Kthread to make this header compile.) -+ # We check for pthread_join because it is in -lpthread on IRIX -+ # while pthread_create is in libc. We check for pthread_attr_init -+ # due to DEC craziness with -lpthreads. We check for -+ # pthread_cleanup_push because it is one of the few pthread -+ # functions on Solaris that doesn't have a non-functional libc stub. -+ # We try pthread_create on general principles. -+ AC_TRY_LINK([#include ], -+ [pthread_t th; pthread_join(th, 0); -+ pthread_attr_init(0); pthread_cleanup_push(0, 0); -+ pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], -+ [acx_pthread_ok=yes]) -+ -+ LIBS="$save_LIBS" -+ CFLAGS="$save_CFLAGS" -+ -+ AC_MSG_RESULT($acx_pthread_ok) -+ if test "x$acx_pthread_ok" = xyes; then -+ break; -+ fi -+ -+ PTHREAD_LIBS="" -+ PTHREAD_CFLAGS="" -+done -+fi -+ -+# Various other checks: -+if test "x$acx_pthread_ok" = xyes; then -+ save_LIBS="$LIBS" -+ LIBS="$PTHREAD_LIBS $LIBS" -+ save_CFLAGS="$CFLAGS" -+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -+ -+ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. -+ AC_MSG_CHECKING([for joinable pthread attribute]) -+ attr_name=unknown -+ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do -+ AC_TRY_LINK([#include ], [int attr=$attr;], -+ [attr_name=$attr; break]) -+ done -+ AC_MSG_RESULT($attr_name) -+ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then -+ AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, -+ [Define to necessary symbol if this constant -+ uses a non-standard name on your system.]) -+ fi -+ -+ AC_MSG_CHECKING([if more special flags are required for pthreads]) -+ flag=no -+ case "${host_cpu}-${host_os}" in -+ *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; -+ *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; -+ esac -+ AC_MSG_RESULT(${flag}) -+ if test "x$flag" != xno; then -+ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" -+ fi -+ -+ LIBS="$save_LIBS" -+ CFLAGS="$save_CFLAGS" -+ -+ # More AIX lossage: must compile with cc_r -+ AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) -+else -+ PTHREAD_CC="$CC" -+fi -+ -+AC_SUBST(PTHREAD_LIBS) -+AC_SUBST(PTHREAD_CFLAGS) -+AC_SUBST(PTHREAD_CC) -+ -+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -+if test x"$acx_pthread_ok" = xyes; then -+ ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) -+ : -+else -+ acx_pthread_ok=no -+ $2 -+fi -+AC_LANG_RESTORE -+])dnl ACX_PTHREAD -diff -urN a/SConstruct b/SConstruct ---- a/SConstruct 2008-10-19 14:27:32.000000000 +0200 -+++ b/SConstruct 2010-02-10 11:06:33.000000000 +0100 -@@ -29,7 +29,7 @@ - # Package version number - packageVersionMajor = 0 - packageVersionMinor = 9 --packageVersionMicro = 0 -+packageVersionMicro = 1 - - # API version number (libtool) - # -@@ -376,6 +376,7 @@ - ] - - libvmime_autotools = [ -+ 'm4/acx_pthread.m4', - 'm4/iconv.m4', - 'm4/lib-ld.m4', - 'm4/lib-link.m4', -@@ -439,9 +440,11 @@ - - SetOption('implicit_cache', 1) - --#SourceSignatures('timestamp') --SourceSignatures('MD5') --TargetSignatures('build') -+try: -+ Decider('MD5-timestamp') -+except: -+ SourceSignatures('MD5') -+ TargetSignatures('build') - - - ############# -@@ -528,14 +531,6 @@ - defaultSendmailPath - ), - EnumOption( -- 'with_wide_char_support', -- 'Support for wide characters (rarely used, should be set to "no")', -- 'no', -- allowed_values = ('yes', 'no'), -- map = { }, -- ignorecase = 1 -- ), -- EnumOption( - 'byte_order', - 'Byte order (Big Endian or Little Endian)', - sys.byteorder, -@@ -592,7 +587,6 @@ - - env.Append(CPPDEFINES = ['_REENTRANT=1']) - --env.Append(CXXFLAGS = ['-pipe']) - env.Append(CXXFLAGS = ['-W']) - env.Append(CXXFLAGS = ['-Wall']) - env.Append(CXXFLAGS = ['-ansi']) -@@ -801,12 +795,6 @@ - - config_hpp.write('// Options\n') - --config_hpp.write('// -- Wide characters support\n') --if env['with_wide_char_support'] == 'yes': -- config_hpp.write('#define VMIME_WIDE_CHAR_SUPPORT 1\n') --else: -- config_hpp.write('#define VMIME_WIDE_CHAR_SUPPORT 0\n') -- - config_hpp.write('// -- File-system support\n') - if env['with_filesystem'] == 'yes': - config_hpp.write('#define VMIME_HAVE_FILESYSTEM_FEATURES 1\n') -@@ -1417,8 +1405,8 @@ - AC_MSG_CHECKING([if C++ compiler supports dynamic_cast<> (required)]) - AC_TRY_COMPILE( - [ -- class foo { virtual ~foo() { } }; -- class bar : public foo { }; -+ class foo { public: virtual ~foo() { } }; -+ class bar : public foo { public: virtual ~bar() { } }; - ],[ - foo *c=0; - bar *c1=dynamic_cast(c); -@@ -1620,7 +1608,7 @@ - - if test "x$conf_tls" = "xyes"; then - # -- GNU TLS Library (http://www.gnu.org/software/gnutls/) -- AM_PATH_LIBGNUTLS(1.2.0, have_gnutls=yes, have_gnutls=no) -+ PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 1.2.0], have_gnutls=yes, have_gnutls=no) - - if test "x$have_gnutls" = "xyes"; then - AM_CONDITIONAL(VMIME_HAVE_TLS_SUPPORT, true) -@@ -1833,7 +1821,7 @@ - - """) - -- compilerFlags = [ '-pipe', '-ansi', '-pedantic', '-W', '-Wall', '-Wpointer-arith', '-Wold-style-cast', '-Wconversion' ] -+ compilerFlags = [ '-ansi', '-pedantic', '-W', '-Wall', '-Wpointer-arith', '-Wold-style-cast', '-Wconversion' ] - - for f in compilerFlags: - configure_in.write('# ' + f + '\n') -@@ -1915,8 +1903,6 @@ - typedef unsigned ${VMIME_TYPE_INT32} vmime_uint32; - - // Options --// -- Wide characters support --#define VMIME_WIDE_CHAR_SUPPORT 0 - // -- File-system support - #define VMIME_HAVE_FILESYSTEM_FEATURES 1 - // -- SASL support -@@ -2260,8 +2246,6 @@ - - - // Options --// -- Wide characters support --#define VMIME_WIDE_CHAR_SUPPORT 0 - // -- File-system support - #define VMIME_HAVE_FILESYSTEM_FEATURES 1 - // -- SASL support -diff -urN a/src/address.cpp b/src/address.cpp ---- a/src/address.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/address.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/addressList.cpp b/src/addressList.cpp ---- a/src/addressList.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/addressList.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/attachmentHelper.cpp b/src/attachmentHelper.cpp ---- a/src/attachmentHelper.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/attachmentHelper.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/base.cpp b/src/base.cpp ---- a/src/base.cpp 2008-10-12 15:41:25.000000000 +0200 -+++ b/src/base.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -55,12 +55,6 @@ - */ - const string NULL_STRING; - --#if VMIME_WIDE_CHAR_SUPPORT -- /** "Null" (empty) wide-char string. -- */ -- const wstring NULL_WSTRING; --#endif -- - /** "Null" (empty) text. - */ - const text NULL_TEXT; -diff -urN a/src/body.cpp b/src/body.cpp ---- a/src/body.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/body.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/bodyPartAttachment.cpp b/src/bodyPartAttachment.cpp ---- a/src/bodyPartAttachment.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/bodyPartAttachment.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/bodyPart.cpp b/src/bodyPart.cpp ---- a/src/bodyPart.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/bodyPart.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/charsetConverter.cpp b/src/charsetConverter.cpp ---- a/src/charsetConverter.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/charsetConverter.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -53,6 +53,27 @@ - } - - -+ -+// Output replacement char when an invalid sequence is encountered -+template -+void outputInvalidChar(OUTPUT_CLASS& out, ICONV_DESC cd) -+{ -+ const char* invalidCharIn = "?"; -+ size_t invalidCharInLen = 1; -+ -+ char invalidCharOutBuffer[16]; -+ char* invalidCharOutPtr = invalidCharOutBuffer; -+ size_t invalidCharOutLen = 16; -+ -+ if (iconv(cd, ICONV_HACK(&invalidCharIn), &invalidCharInLen, -+ &invalidCharOutPtr, &invalidCharOutLen) != static_cast (-1)) -+ { -+ out.write(invalidCharOutBuffer, 16 - invalidCharOutLen); -+ } -+} -+ -+ -+ - namespace vmime - { - -@@ -121,7 +142,7 @@ - - // Output a special character to indicate we don't known how to - // convert the sequence at this position -- out.write("?", 1); -+ outputInvalidChar(out, cd); - - // Skip a byte and leave unconverted bytes in the input buffer - std::copy(const_cast (inPtr + 1), inBuffer + sizeof(inBuffer), inBuffer); -@@ -235,7 +256,7 @@ - // character and skip one byte in the invalid sequence. - if (m_unconvCount >= sizeof(m_unconvBuffer)) - { -- m_stream.write("?", 1); -+ outputInvalidChar(m_stream, cd); - - std::copy(m_unconvBuffer + 1, - m_unconvBuffer + m_unconvCount, m_unconvBuffer); -@@ -358,7 +379,7 @@ - // Skip a "blocking" character - if (inputConverted == 0) - { -- m_stream.write("?", 1); -+ outputInvalidChar(m_stream, cd); - - offset++; - m_unconvCount--; -diff -urN a/src/charset.cpp b/src/charset.cpp ---- a/src/charset.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/charset.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/component.cpp b/src/component.cpp ---- a/src/component.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/component.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/constants.cpp b/src/constants.cpp ---- a/src/constants.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/constants.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/contentDisposition.cpp b/src/contentDisposition.cpp ---- a/src/contentDisposition.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/contentDisposition.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/contentDispositionField.cpp b/src/contentDispositionField.cpp ---- a/src/contentDispositionField.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/contentDispositionField.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/contentHandler.cpp b/src/contentHandler.cpp ---- a/src/contentHandler.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/contentHandler.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/contentTypeField.cpp b/src/contentTypeField.cpp ---- a/src/contentTypeField.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/contentTypeField.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/dateTime.cpp b/src/dateTime.cpp ---- a/src/dateTime.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/dateTime.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -427,7 +427,7 @@ - zone[zoneLength++] = *p; - ++p; - } -- while (zoneLength < 3 && p < pend && parserHelpers::isDigit(*p)); -+ while (zoneLength < 3 && p < pend); - - switch (zone[0]) - { -@@ -491,6 +491,8 @@ - - break; - } -+ case 'g': -+ case 'G': - case 'u': - case 'U': - { -diff -urN a/src/defaultAttachment.cpp b/src/defaultAttachment.cpp ---- a/src/defaultAttachment.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/defaultAttachment.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/disposition.cpp b/src/disposition.cpp ---- a/src/disposition.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/disposition.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/emptyContentHandler.cpp b/src/emptyContentHandler.cpp ---- a/src/emptyContentHandler.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/emptyContentHandler.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/encoding.cpp b/src/encoding.cpp ---- a/src/encoding.cpp 2008-10-12 15:41:52.000000000 +0200 -+++ b/src/encoding.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/exception.cpp b/src/exception.cpp ---- a/src/exception.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/exception.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/fileAttachment.cpp b/src/fileAttachment.cpp ---- a/src/fileAttachment.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/fileAttachment.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -31,48 +31,93 @@ - - #include "vmime/contentDispositionField.hpp" - -+#include "vmime/platform.hpp" -+#include "vmime/utility/file.hpp" -+ - - namespace vmime - { - - --fileAttachment::fileAttachment(const string& filename, const mediaType& type) -+fileAttachment::fileAttachment(const string& filepath, const mediaType& type) - { - m_type = type; - -- setData(filename); -+ setData(filepath); - - m_encoding = encoding::decide(m_data); - } - - --fileAttachment::fileAttachment(const string& filename, const mediaType& type, const text& desc) -+fileAttachment::fileAttachment(const string& filepath, const mediaType& type, const text& desc) - { - m_type = type; - m_desc = desc; - -- setData(filename); -+ setData(filepath); - - m_encoding = encoding::decide(m_data); - } - - --fileAttachment::fileAttachment(const string& filename, const mediaType& type, -+fileAttachment::fileAttachment(const string& filepath, const mediaType& type, - const text& desc, const encoding& enc) - { - m_type = type; - m_desc = desc; - -- setData(filename); -+ setData(filepath); -+ -+ m_encoding = enc; -+} -+ -+ -+fileAttachment::fileAttachment(ref is, const word& filename, const mediaType& type) -+{ -+ if (!filename.isEmpty()) -+ m_fileInfo.setFilename(filename); -+ -+ m_type = type; -+ -+ setData(is); -+ -+ m_encoding = encoding::decide(m_data); -+} -+ -+ -+fileAttachment::fileAttachment(ref is, const word& filename, -+ const mediaType& type, const text& desc) -+{ -+ if (!filename.isEmpty()) -+ m_fileInfo.setFilename(filename); -+ -+ m_type = type; -+ m_desc = desc; -+ -+ setData(is); -+ -+ m_encoding = encoding::decide(m_data); -+} -+ -+ -+fileAttachment::fileAttachment(ref is, const word& filename, -+ const mediaType& type, const text& desc, const encoding& enc) -+{ -+ if (!filename.isEmpty()) -+ m_fileInfo.setFilename(filename); - -+ m_type = type; -+ m_desc = desc; - m_encoding = enc; -+ -+ setData(is); - } - - --void fileAttachment::setData(const string& filename) -+void fileAttachment::setData(const string& filepath) - { - std::ifstream* file = new std::ifstream(); -- file->open(filename.c_str(), std::ios::in | std::ios::binary); -+ file->open(filepath.c_str(), std::ios::in | std::ios::binary); - - if (!*file) - { -@@ -82,6 +127,15 @@ - - ref is = vmime::create (file, true); - -+ setData(is); -+ -+ utility::file::path path = platform::getHandler()->getFileSystemFactory()->stringToPath(filepath); -+ m_fileInfo.setFilename(path.getLastComponent()); -+} -+ -+ -+void fileAttachment::setData(ref is) -+{ - m_data = vmime::create (is, 0); - } - -@@ -94,7 +148,7 @@ - dynamicCast (); - - if (m_fileInfo.hasSize()) cdf->setSize(utility::stringUtils::toString(m_fileInfo.getSize())); -- if (m_fileInfo.hasFilename()) cdf->setFilename(m_fileInfo.getFilename()); -+ if (m_fileInfo.hasFilename() && !m_fileInfo.getFilename().isEmpty()) cdf->setFilename(m_fileInfo.getFilename()); - if (m_fileInfo.hasCreationDate()) cdf->setCreationDate(m_fileInfo.getCreationDate()); - if (m_fileInfo.hasModificationDate()) cdf->setModificationDate(m_fileInfo.getModificationDate()); - if (m_fileInfo.hasReadDate()) cdf->setReadDate(m_fileInfo.getReadDate()); -@@ -134,8 +188,9 @@ - } - - bool fileAttachment::fileInfo::hasFilename() const { return (m_filename != NULL); } --const string& fileAttachment::fileInfo::getFilename() const { return (*m_filename); } --void fileAttachment::fileInfo::setFilename(const string& name) { if (m_filename) { *m_filename = name; } else { m_filename = new string(name); } } -+const word& fileAttachment::fileInfo::getFilename() const { return (*m_filename); } -+void fileAttachment::fileInfo::setFilename(const string& name) { if (m_filename) { *m_filename = name; } else { m_filename = new word(name); } } -+void fileAttachment::fileInfo::setFilename(const word& name) { if (m_filename) { *m_filename = name; } else { m_filename = new word(name); } } - - bool fileAttachment::fileInfo::hasCreationDate() const { return (m_creationDate != NULL); } - const datetime& fileAttachment::fileInfo::getCreationDate() const { return (*m_creationDate); } -diff -urN a/src/generatedMessageAttachment.cpp b/src/generatedMessageAttachment.cpp ---- a/src/generatedMessageAttachment.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/generatedMessageAttachment.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/header.cpp b/src/header.cpp ---- a/src/header.cpp 2008-10-12 11:02:22.000000000 +0200 -+++ b/src/header.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/headerField.cpp b/src/headerField.cpp ---- a/src/headerField.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/headerField.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/headerFieldFactory.cpp b/src/headerFieldFactory.cpp ---- a/src/headerFieldFactory.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/headerFieldFactory.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/htmlTextPart.cpp b/src/htmlTextPart.cpp ---- a/src/htmlTextPart.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/htmlTextPart.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mailbox.cpp b/src/mailbox.cpp ---- a/src/mailbox.cpp 2008-10-12 11:03:13.000000000 +0200 -+++ b/src/mailbox.cpp 2010-02-10 10:56:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -369,7 +369,7 @@ - // We have to encode the name: - // - if it contains characters in a charset different from "US-ASCII", - // - and/or if it contains one or more of these special chars: -- // SPACE TAB " ; , < > ( ) @ / ? . = : -+ // CR LF TAB " ; , < > ( ) @ / ? . = : - - // Check whether there are words that are not "US-ASCII" - // and/or contain the special chars. -@@ -386,7 +386,8 @@ - { - switch (*c) - { -- case ' ': -+ case '\r': -+ case '\n': - case '\t': - case ';': - case ',': -@@ -415,7 +416,7 @@ - bool newLine = true; - - m_name.encodeAndFold(os, maxLineLength, pos, &pos, -- forceEncode ? text::FORCE_ENCODING : 0); -+ text::QUOTE_IF_POSSIBLE | (forceEncode ? text::FORCE_ENCODING : 0)); - - if (pos + m_email.length() + 3 > maxLineLength) - { -diff -urN a/src/mailboxField.cpp b/src/mailboxField.cpp ---- a/src/mailboxField.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mailboxField.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mailboxGroup.cpp b/src/mailboxGroup.cpp ---- a/src/mailboxGroup.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mailboxGroup.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mailboxList.cpp b/src/mailboxList.cpp ---- a/src/mailboxList.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mailboxList.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mdn/MDNHelper.cpp b/src/mdn/MDNHelper.cpp ---- a/src/mdn/MDNHelper.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mdn/MDNHelper.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mdn/MDNInfos.cpp b/src/mdn/MDNInfos.cpp ---- a/src/mdn/MDNInfos.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mdn/MDNInfos.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mdn/receivedMDNInfos.cpp b/src/mdn/receivedMDNInfos.cpp ---- a/src/mdn/receivedMDNInfos.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mdn/receivedMDNInfos.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mdn/sendableMDNInfos.cpp b/src/mdn/sendableMDNInfos.cpp ---- a/src/mdn/sendableMDNInfos.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mdn/sendableMDNInfos.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/mediaType.cpp b/src/mediaType.cpp ---- a/src/mediaType.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/mediaType.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/messageBuilder.cpp b/src/messageBuilder.cpp ---- a/src/messageBuilder.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/messageBuilder.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -54,11 +54,17 @@ - if (m_from.isEmpty()) - throw exceptions::no_expeditor(); - -- if (m_to.isEmpty() || m_to.getAddressAt(0)->isEmpty()) -+ if ((m_to.isEmpty() || m_to.getAddressAt(0)->isEmpty()) && -+ (m_cc.isEmpty() || m_cc.getAddressAt(0)->isEmpty()) && -+ (m_bcc.isEmpty() || m_bcc.getAddressAt(0)->isEmpty())) -+ { - throw exceptions::no_recipient(); -+ } - - msg->getHeader()->From()->setValue(m_from); -- msg->getHeader()->To()->setValue(m_to); -+ -+ if (!m_to.isEmpty()) -+ msg->getHeader()->To()->setValue(m_to); - - if (!m_cc.isEmpty()) - msg->getHeader()->Cc()->setValue(m_cc); -@@ -142,6 +148,9 @@ - { - const bodyPart& part = *msg->getBody()->getPartAt(0); - -+ // Make a full copy of the body, otherwise the copyFrom() will delete the body we're copying -+ ref bodyCopy = part.getBody()->clone().dynamicCast (); -+ - // First, copy (and replace) the header fields - const std::vector > fields = part.getHeader()->getFieldList(); - -@@ -153,7 +162,7 @@ - - // Second, copy the body contents and sub-parts (this also remove - // the body part we are copying...) -- msg->getBody()->copyFrom(*part.getBody()); -+ msg->getBody()->copyFrom(*bodyCopy); - } - - return (msg); -diff -urN a/src/message.cpp b/src/message.cpp ---- a/src/message.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/message.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/messageId.cpp b/src/messageId.cpp ---- a/src/messageId.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/messageId.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/messageIdSequence.cpp b/src/messageIdSequence.cpp ---- a/src/messageIdSequence.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/messageIdSequence.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/messageParser.cpp b/src/messageParser.cpp ---- a/src/messageParser.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/messageParser.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/misc/importanceHelper.cpp b/src/misc/importanceHelper.cpp ---- a/src/misc/importanceHelper.cpp 2008-10-12 11:12:02.000000000 +0200 -+++ b/src/misc/importanceHelper.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/builtinServices.inl b/src/net/builtinServices.inl ---- a/src/net/builtinServices.inl 2008-01-05 18:49:19.000000000 +0100 -+++ b/src/net/builtinServices.inl 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/defaultConnectionInfos.cpp b/src/net/defaultConnectionInfos.cpp ---- a/src/net/defaultConnectionInfos.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/defaultConnectionInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/events.cpp b/src/net/events.cpp ---- a/src/net/events.cpp 2008-10-12 11:25:21.000000000 +0200 -+++ b/src/net/events.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/folder.cpp b/src/net/folder.cpp ---- a/src/net/folder.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/folder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/imap/IMAPConnection.cpp b/src/net/imap/IMAPConnection.cpp ---- a/src/net/imap/IMAPConnection.cpp 2008-10-12 11:28:37.000000000 +0200 -+++ b/src/net/imap/IMAPConnection.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -718,6 +718,12 @@ - } - - -+ref IMAPConnection::getSocket() const -+{ -+ return m_socket; -+} -+ -+ - } // imap - } // net - } // vmime -diff -urN a/src/net/imap/IMAPFolder.cpp b/src/net/imap/IMAPFolder.cpp ---- a/src/net/imap/IMAPFolder.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/imap/IMAPFolder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -1284,7 +1284,11 @@ - if (progress) - progress->start(total); - -- char buffer[65536]; -+ const socket::size_type blockSize = std::min(is.getBlockSize(), -+ static_cast (m_connection->getSocket()->getBlockSize())); -+ -+ std::vector vbuffer(blockSize); -+ char* buffer = &vbuffer.front(); - - while (!is.eof()) - { -diff -urN a/src/net/imap/IMAPMessage.cpp b/src/net/imap/IMAPMessage.cpp ---- a/src/net/imap/IMAPMessage.cpp 2008-10-12 11:33:02.000000000 +0200 -+++ b/src/net/imap/IMAPMessage.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/imap/IMAPServiceInfos.cpp b/src/net/imap/IMAPServiceInfos.cpp ---- a/src/net/imap/IMAPServiceInfos.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/imap/IMAPServiceInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/imap/IMAPSStore.cpp b/src/net/imap/IMAPSStore.cpp ---- a/src/net/imap/IMAPSStore.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/imap/IMAPSStore.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/imap/IMAPStore.cpp b/src/net/imap/IMAPStore.cpp ---- a/src/net/imap/IMAPStore.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/imap/IMAPStore.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/imap/IMAPTag.cpp b/src/net/imap/IMAPTag.cpp ---- a/src/net/imap/IMAPTag.cpp 2008-10-12 11:35:01.000000000 +0200 -+++ b/src/net/imap/IMAPTag.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/imap/IMAPUtils.cpp b/src/net/imap/IMAPUtils.cpp ---- a/src/net/imap/IMAPUtils.cpp 2008-10-12 11:34:27.000000000 +0200 -+++ b/src/net/imap/IMAPUtils.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/maildir/format/courierMaildirFormat.cpp b/src/net/maildir/format/courierMaildirFormat.cpp ---- a/src/net/maildir/format/courierMaildirFormat.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/maildir/format/courierMaildirFormat.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -49,7 +49,7 @@ - - void courierMaildirFormat::createFolder(const folder::path& path) - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - if (!fsf->isValidPath(folderPathToFileSystemPath(path, ROOT_DIRECTORY))) - throw exceptions::invalid_folder_name(); -@@ -80,7 +80,7 @@ - - void courierMaildirFormat::destroyFolder(const folder::path& path) - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - // Recursively delete directories of subfolders - const std::vector folders = listFolders(path, true); -@@ -119,7 +119,7 @@ - void courierMaildirFormat::renameFolderImpl - (const folder::path& oldPath, const folder::path& newPath) - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - const utility::file::path oldFSPath = - folderPathToFileSystemPath(oldPath, ROOT_DIRECTORY); -@@ -134,7 +134,7 @@ - - bool courierMaildirFormat::folderExists(const folder::path& path) const - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref rootDir = fsf->create - (folderPathToFileSystemPath(path, ROOT_DIRECTORY)); -@@ -254,7 +254,7 @@ - bool courierMaildirFormat::listDirectories(const folder::path& root, - std::vector & dirs, const bool onlyTestForExistence) const - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref rootDir = fsf->create - (getContext()->getStore()->getFileSystemPath()); -@@ -496,7 +496,7 @@ - - bool courierMaildirFormat::supports() const - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref rootDir = fsf->create - (getContext()->getStore()->getFileSystemPath()); -diff -urN a/src/net/maildir/format/kmailMaildirFormat.cpp b/src/net/maildir/format/kmailMaildirFormat.cpp ---- a/src/net/maildir/format/kmailMaildirFormat.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/maildir/format/kmailMaildirFormat.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -49,7 +49,7 @@ - - void kmailMaildirFormat::createFolder(const folder::path& path) - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - if (!fsf->isValidPath(folderPathToFileSystemPath(path, ROOT_DIRECTORY))) - throw exceptions::invalid_folder_name(); -@@ -75,7 +75,7 @@ - void kmailMaildirFormat::destroyFolder(const folder::path& path) - { - // Delete 'folder' and '.folder.directory' directories -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - maildirUtils::recursiveFSDelete(fsf->create - (folderPathToFileSystemPath(path, ROOT_DIRECTORY))); // root -@@ -87,7 +87,7 @@ - - bool kmailMaildirFormat::folderExists(const folder::path& path) const - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref rootDir = fsf->create - (folderPathToFileSystemPath(path, ROOT_DIRECTORY)); -@@ -177,7 +177,7 @@ - void kmailMaildirFormat::listFoldersImpl - (std::vector & list, const folder::path& root, const bool recursive) const - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref rootDir = fsf->create(folderPathToFileSystemPath(root, - root.isEmpty() ? ROOT_DIRECTORY : CONTAINER_DIRECTORY)); -@@ -226,7 +226,7 @@ - - void kmailMaildirFormat::renameFolder(const folder::path& oldPath, const folder::path& newPath) - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref rootDir = fsf->create - (folderPathToFileSystemPath(oldPath, ROOT_DIRECTORY)); -@@ -277,7 +277,7 @@ - - bool kmailMaildirFormat::folderHasSubfolders(const folder::path& path) const - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref rootDir = fsf->create - (folderPathToFileSystemPath(path, CONTAINER_DIRECTORY)); -diff -urN a/src/net/maildir/maildirFolder.cpp b/src/net/maildir/maildirFolder.cpp ---- a/src/net/maildir/maildirFolder.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/maildir/maildirFolder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -264,7 +264,7 @@ - m_messageCount = 0; - m_unreadMessageCount = 0; - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - utility::file::path newDirPath = store->getFormat()->folderPathToFileSystemPath - (m_path, maildirFormat::NEW_DIRECTORY); -@@ -760,7 +760,7 @@ - { - ref store = m_store.acquire(); - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - utility::file::path curDirPath = store->getFormat()-> - folderPathToFileSystemPath(m_path, maildirFormat::CUR_DIRECTORY); -@@ -832,12 +832,15 @@ - else if (m_mode == MODE_READ_ONLY) - throw exceptions::illegal_state("Folder is read-only"); - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - utility::file::path tmpDirPath = store->getFormat()-> -- folderPathToFileSystemPath(m_path, maildirFormat::TMP_DIRECTORY); -- utility::file::path curDirPath = store->getFormat()-> -- folderPathToFileSystemPath(m_path, maildirFormat::CUR_DIRECTORY); -+ folderPathToFileSystemPath(m_path,maildirFormat::TMP_DIRECTORY); -+ utility::file::path dstDirPath = store->getFormat()-> -+ folderPathToFileSystemPath(m_path, -+ flags == message::FLAG_RECENT ? -+ maildirFormat::NEW_DIRECTORY : -+ maildirFormat::CUR_DIRECTORY); - - const utility::file::path::component filename = - maildirUtils::buildFilename(maildirUtils::generateId(), -@@ -855,7 +858,7 @@ - - try - { -- ref curDir = fsf->create(curDirPath); -+ ref curDir = fsf->create(dstDirPath); - curDir->createDirectory(true); - } - catch (exceptions::filesystem_exception&) -@@ -864,7 +867,7 @@ - } - - // Actually add the message -- copyMessageImpl(tmpDirPath, curDirPath, filename, is, size, progress); -+ copyMessageImpl(tmpDirPath, dstDirPath, filename, is, size, progress); - - // Append the message to the cache list - messageInfos msgInfos; -@@ -910,11 +913,12 @@ - - - void maildirFolder::copyMessageImpl(const utility::file::path& tmpDirPath, -- const utility::file::path& curDirPath, const utility::file::path::component& filename, -+ const utility::file::path& dstDirPath, -+ const utility::file::path::component& filename, - utility::inputStream& is, const utility::stream::size_type size, - utility::progressListener* progress) - { -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - ref file = fsf->create(tmpDirPath / filename); - -@@ -945,6 +949,8 @@ - if (progress) - progress->progress(total, size); - } -+ -+ os->flush(); - } - catch (exception& e) - { -@@ -968,7 +974,7 @@ - // ...then, move it to 'cur' - try - { -- file->rename(curDirPath / filename); -+ file->rename(dstDirPath / filename); - } - catch (exception& e) - { -@@ -978,7 +984,8 @@ - // Delete temporary file - try - { -- ref file = fsf->create(tmpDirPath / filename); -+ file->remove(); -+ ref file = fsf->create(dstDirPath / filename); - file->remove(); - } - catch (exceptions::filesystem_exception&) -@@ -1051,7 +1058,7 @@ - { - ref store = m_store.acquire(); - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - utility::file::path curDirPath = store->getFormat()->folderPathToFileSystemPath - (m_path, maildirFormat::CUR_DIRECTORY); -@@ -1193,7 +1200,7 @@ - else if (m_mode == MODE_READ_ONLY) - throw exceptions::illegal_state("Folder is read-only"); - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - utility::file::path curDirPath = store->getFormat()-> - folderPathToFileSystemPath(m_path, maildirFormat::CUR_DIRECTORY); -diff -urN a/src/net/maildir/maildirFormat.cpp b/src/net/maildir/maildirFormat.cpp ---- a/src/net/maildir/maildirFormat.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/maildir/maildirFormat.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -52,7 +52,7 @@ - - ref maildirFormat::context::getStore() const - { -- return m_store; -+ return m_store.acquire().constCast (); - } - - -diff -urN a/src/net/maildir/maildirMessage.cpp b/src/net/maildir/maildirMessage.cpp ---- a/src/net/maildir/maildirMessage.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/maildir/maildirMessage.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -346,7 +346,7 @@ - { - ref folder = m_folder.acquire(); - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - const utility::file::path path = folder->getMessageFSPath(m_num); - ref file = fsf->create(path); -@@ -393,7 +393,7 @@ - - ref mp = p.dynamicCast (); - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - const utility::file::path path = folder->getMessageFSPath(m_num); - ref file = fsf->create(path); -@@ -430,7 +430,7 @@ - if (folder != msgFolder) - throw exceptions::folder_not_found(); - -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - const utility::file::path path = folder->getMessageFSPath(m_num); - ref file = fsf->create(path); -diff -urN a/src/net/maildir/maildirServiceInfos.cpp b/src/net/maildir/maildirServiceInfos.cpp ---- a/src/net/maildir/maildirServiceInfos.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/maildir/maildirServiceInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/maildir/maildirStore.cpp b/src/net/maildir/maildirStore.cpp ---- a/src/net/maildir/maildirStore.cpp 2008-10-12 11:36:52.000000000 +0200 -+++ b/src/net/maildir/maildirStore.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -132,7 +132,7 @@ - throw exceptions::already_connected(); - - // Get root directory -- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); -+ ref fsf = platform::getHandler()->getFileSystemFactory(); - - m_fsPath = fsf->stringToPath(GET_PROPERTY(string, PROPERTY_SERVER_ROOTPATH)); - -diff -urN a/src/net/maildir/maildirUtils.cpp b/src/net/maildir/maildirUtils.cpp ---- a/src/net/maildir/maildirUtils.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/maildir/maildirUtils.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -25,6 +25,7 @@ - #include "vmime/net/maildir/maildirStore.hpp" - - #include "vmime/utility/random.hpp" -+#include "vmime/platform.hpp" - - #include "vmime/exception.hpp" - -@@ -128,18 +129,24 @@ - const utility::file::path::component maildirUtils::buildFilename - (const utility::file::path::component& id, const int flags) - { -- return (buildFilename(id, buildFlags(flags))); -+ if (flags == message::FLAG_RECENT) -+ return id; -+ else -+ return (buildFilename(id, buildFlags(flags))); - } - - - const utility::file::path::component maildirUtils::buildFilename -- (const utility::file::path::component& id, const utility::file::path::component& flags) -+ (const utility::file::path::component& id, -+ const utility::file::path::component& flags) - { - #if VMIME_BUILTIN_PLATFORM_WINDOWS -- return (utility::path::component(id.getBuffer() + "-" + flags.getBuffer())); // use dash -+ static const char DELIMITER[] = "-"; - #else -- return (utility::path::component(id.getBuffer() + ":" + flags.getBuffer())); // use colon -+ static const char DELIMITER[] = ":"; - #endif -+ -+ return utility::path::component(id.getBuffer() + DELIMITER + flags.getBuffer()); - } - - -@@ -153,6 +160,8 @@ - oss << utility::random::getProcess(); - oss << "."; - oss << utility::random::getString(6); -+ oss << "."; -+ oss << platform::getHandler()->getHostName(); - - return (utility::file::path::component(oss.str())); - } -diff -urN a/src/net/message.cpp b/src/net/message.cpp ---- a/src/net/message.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/message.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/pop3/POP3Folder.cpp b/src/net/pop3/POP3Folder.cpp ---- a/src/net/pop3/POP3Folder.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/pop3/POP3Folder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/pop3/POP3Message.cpp b/src/net/pop3/POP3Message.cpp ---- a/src/net/pop3/POP3Message.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/pop3/POP3Message.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/pop3/POP3ServiceInfos.cpp b/src/net/pop3/POP3ServiceInfos.cpp ---- a/src/net/pop3/POP3ServiceInfos.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/pop3/POP3ServiceInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/pop3/POP3SStore.cpp b/src/net/pop3/POP3SStore.cpp ---- a/src/net/pop3/POP3SStore.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/pop3/POP3SStore.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/pop3/POP3Store.cpp b/src/net/pop3/POP3Store.cpp ---- a/src/net/pop3/POP3Store.cpp 2008-10-12 11:32:11.000000000 +0200 -+++ b/src/net/pop3/POP3Store.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/pop3/POP3Utils.cpp b/src/net/pop3/POP3Utils.cpp ---- a/src/net/pop3/POP3Utils.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/pop3/POP3Utils.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/sendmail/sendmailServiceInfos.cpp b/src/net/sendmail/sendmailServiceInfos.cpp ---- a/src/net/sendmail/sendmailServiceInfos.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/sendmail/sendmailServiceInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/sendmail/sendmailTransport.cpp b/src/net/sendmail/sendmailTransport.cpp ---- a/src/net/sendmail/sendmailTransport.cpp 2008-10-12 11:36:47.000000000 +0200 -+++ b/src/net/sendmail/sendmailTransport.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/service.cpp b/src/net/service.cpp ---- a/src/net/service.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/service.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/serviceFactory.cpp b/src/net/serviceFactory.cpp ---- a/src/net/serviceFactory.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/serviceFactory.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/serviceInfos.cpp b/src/net/serviceInfos.cpp ---- a/src/net/serviceInfos.cpp 2008-10-12 10:58:42.000000000 +0200 -+++ b/src/net/serviceInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/serviceRegistration.inl b/src/net/serviceRegistration.inl ---- a/src/net/serviceRegistration.inl 2008-10-12 11:25:52.000000000 +0200 -+++ b/src/net/serviceRegistration.inl 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/session.cpp b/src/net/session.cpp ---- a/src/net/session.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/session.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/smtp/SMTPResponse.cpp b/src/net/smtp/SMTPResponse.cpp ---- a/src/net/smtp/SMTPResponse.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/smtp/SMTPResponse.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/smtp/SMTPServiceInfos.cpp b/src/net/smtp/SMTPServiceInfos.cpp ---- a/src/net/smtp/SMTPServiceInfos.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/smtp/SMTPServiceInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/smtp/SMTPSTransport.cpp b/src/net/smtp/SMTPSTransport.cpp ---- a/src/net/smtp/SMTPSTransport.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/smtp/SMTPSTransport.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/smtp/SMTPTransport.cpp b/src/net/smtp/SMTPTransport.cpp ---- a/src/net/smtp/SMTPTransport.cpp 2008-10-12 15:50:54.000000000 +0200 -+++ b/src/net/smtp/SMTPTransport.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -617,8 +617,10 @@ - - void SMTPTransport::sendRequest(const string& buffer, const bool end) - { -- m_socket->send(buffer); -- if (end) m_socket->send("\r\n"); -+ if (end) -+ m_socket->send(buffer + "\r\n"); -+ else -+ m_socket->send(buffer); - } - - -diff -urN a/src/net/tls/TLSSecuredConnectionInfos.cpp b/src/net/tls/TLSSecuredConnectionInfos.cpp ---- a/src/net/tls/TLSSecuredConnectionInfos.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/tls/TLSSecuredConnectionInfos.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/net/tls/TLSSession.cpp b/src/net/tls/TLSSession.cpp ---- a/src/net/tls/TLSSession.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/tls/TLSSession.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -24,6 +24,13 @@ - #include - #include - -+#include "vmime/config.hpp" -+ -+#if VMIME_HAVE_PTHREAD -+# include -+# include -+#endif // VMIME_HAVE_PTHREAD -+ - #include "vmime/net/tls/TLSSession.hpp" - - #include "vmime/exception.hpp" -@@ -38,6 +45,14 @@ - #endif // VMIME_DEBUG && GNUTLS_DEBUG - - -+#if VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL) -+extern "C" -+{ -+ GCRY_THREAD_OPTION_PTHREAD_IMPL; -+} -+#endif // VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL -+ -+ - namespace vmime { - namespace net { - namespace tls { -@@ -50,6 +65,10 @@ - { - TLSGlobal() - { -+#if VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL) -+ gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); -+#endif // VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL -+ - gnutls_global_init(); - //gnutls_global_init_extra(); - -diff -urN a/src/net/tls/TLSSocket.cpp b/src/net/tls/TLSSocket.cpp ---- a/src/net/tls/TLSSocket.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/net/tls/TLSSocket.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -90,6 +90,12 @@ - } - - -+TLSSocket::size_type TLSSocket::getBlockSize() const -+{ -+ return 16384; // 16 KB -+} -+ -+ - void TLSSocket::receive(string& buffer) - { - const int size = receiveRaw(m_buffer, sizeof(m_buffer)); -@@ -103,7 +109,7 @@ - } - - --int TLSSocket::receiveRaw(char* buffer, const int count) -+TLSSocket::size_type TLSSocket::receiveRaw(char* buffer, const size_type count) - { - const ssize_t ret = gnutls_record_recv - (*m_session->m_gnutlsSession, -@@ -124,7 +130,7 @@ - } - - --void TLSSocket::sendRaw(const char* buffer, const int count) -+void TLSSocket::sendRaw(const char* buffer, const size_type count) - { - gnutls_record_send - (*m_session->m_gnutlsSession, -@@ -292,27 +298,26 @@ - // Try X.509 - gnutls_x509_crt* x509Certs = new gnutls_x509_crt[certCount]; - -- unsigned int count = certCount; -- -- int res = gnutls_x509_crt_list_import -- (x509Certs, &count, rawData, GNUTLS_X509_FMT_PEM, 0); -- -- if (res <= 0) -+ for (unsigned int i = 0; i < certCount; ++i) - { -- count = certCount; -+ gnutls_x509_crt_init(x509Certs + i); -+ -+ int res = gnutls_x509_crt_import(x509Certs[i], rawData + i, -+ GNUTLS_X509_FMT_DER); - -- res = gnutls_x509_crt_list_import -- (x509Certs, &count, rawData, GNUTLS_X509_FMT_DER, 0); -+ if (res < 0) -+ { -+ // XXX more fine-grained error reporting? -+ delete [] x509Certs; -+ return NULL; -+ } - } - -- if (res >= 1) - { - std::vector > certs; - bool error = false; - -- count = static_cast (res); -- -- for (unsigned int i = 0 ; i < count ; ++i) -+ for (unsigned int i = 0 ; i < certCount ; ++i) - { - size_t dataSize = 0; - -diff -urN a/src/net/transport.cpp b/src/net/transport.cpp ---- a/src/net/transport.cpp 2008-10-12 11:30:53.000000000 +0200 -+++ b/src/net/transport.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/object.cpp b/src/object.cpp ---- a/src/object.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/object.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/options.cpp b/src/options.cpp ---- a/src/options.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/options.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/parameter.cpp b/src/parameter.cpp ---- a/src/parameter.cpp 2008-10-12 11:08:59.000000000 +0200 -+++ b/src/parameter.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/parameterizedHeaderField.cpp b/src/parameterizedHeaderField.cpp ---- a/src/parameterizedHeaderField.cpp 2008-10-12 11:47:37.000000000 +0200 -+++ b/src/parameterizedHeaderField.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/parsedMessageAttachment.cpp b/src/parsedMessageAttachment.cpp ---- a/src/parsedMessageAttachment.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/parsedMessageAttachment.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/path.cpp b/src/path.cpp ---- a/src/path.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/path.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/plainTextPart.cpp b/src/plainTextPart.cpp ---- a/src/plainTextPart.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/plainTextPart.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/platform.cpp b/src/platform.cpp ---- a/src/platform.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/platform.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/platforms/posix/posixChildProcess.cpp b/src/platforms/posix/posixChildProcess.cpp ---- a/src/platforms/posix/posixChildProcess.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/platforms/posix/posixChildProcess.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp ---- a/src/platforms/posix/posixFile.cpp 2008-10-12 11:42:23.000000000 +0200 -+++ b/src/platforms/posix/posixFile.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -32,6 +32,7 @@ - - #include - -+#include - #include - - #include "vmime/exception.hpp" -@@ -62,7 +63,10 @@ - posixFileIterator::~posixFileIterator() - { - if (m_dir != NULL) -- ::closedir(m_dir); -+ { -+ if (::closedir(m_dir) == -1) -+ posixFileSystemFactory::reportError(m_path, errno); -+ } - } - - -@@ -85,6 +89,8 @@ - - void posixFileIterator::getNextElement() - { -+ errno = 0; -+ - while ((m_dirEntry = ::readdir(m_dir)) != NULL) - { - const char* name = m_dirEntry->d_name; -@@ -96,6 +102,9 @@ - break; - } - } -+ -+ if (errno) -+ posixFileSystemFactory::reportError(m_path, errno); - } - - -@@ -118,14 +127,36 @@ - - void posixFileWriterOutputStream::write(const value_type* const data, const size_type count) - { -- if (::write(m_fd, data, count) == -1) -- posixFileSystemFactory::reportError(m_path, errno); -+ const value_type* array = data; -+ size_t size = count; -+ -+ while (1) -+ { -+ ssize_t ret = ::write(m_fd, array, size); -+ -+ if (ret == -1) -+ { -+ if (errno == EINTR) -+ continue; -+ -+ posixFileSystemFactory::reportError(m_path, errno); -+ break; -+ } -+ else if (size_t(ret) < size) -+ { -+ array += ret; -+ size -= ret; -+ } -+ -+ break; -+ } - } - - - void posixFileWriterOutputStream::flush() - { -- ::fsync(m_fd); -+ if (::fsync(m_fd) == -1) -+ posixFileSystemFactory::reportError(m_path, errno); - } - - -@@ -142,7 +173,8 @@ - - posixFileReaderInputStream::~posixFileReaderInputStream() - { -- ::close(m_fd); -+ if (::close(m_fd) == -1) -+ posixFileSystemFactory::reportError(m_path, errno); - } - - -@@ -154,7 +186,10 @@ - - void posixFileReaderInputStream::reset() - { -- ::lseek(m_fd, 0, SEEK_SET); -+ if (::lseek(m_fd, 0, SEEK_SET) == off_t(-1)) -+ posixFileSystemFactory::reportError(m_path, errno); -+ -+ m_eof = false; - } - - -@@ -166,7 +201,7 @@ - if ((c = ::read(m_fd, data, count)) == -1) - posixFileSystemFactory::reportError(m_path, errno); - -- if (c == 0) -+ if (c == 0 && count != 0) - m_eof = true; - - return static_cast (c); -@@ -176,8 +211,15 @@ - vmime::utility::stream::size_type posixFileReaderInputStream::skip(const size_type count) - { - const off_t curPos = ::lseek(m_fd, 0, SEEK_CUR); -+ -+ if (curPos == off_t(-1)) -+ posixFileSystemFactory::reportError(m_path, errno); -+ - const off_t newPos = ::lseek(m_fd, count, SEEK_CUR); - -+ if (newPos == off_t(-1)) -+ posixFileSystemFactory::reportError(m_path, errno); -+ - return static_cast (newPos - curPos); - } - -@@ -244,7 +286,11 @@ - if ((fd = ::open(m_nativePath.c_str(), O_CREAT | O_EXCL | O_WRONLY, 0660)) == -1) - posixFileSystemFactory::reportError(m_path, errno); - -- ::close(fd); -+ if (::fsync(fd) == -1) -+ posixFileSystemFactory::reportError(m_path, errno); -+ -+ if (::close(fd) == -1) -+ posixFileSystemFactory::reportError(m_path, errno); - } - - -@@ -257,32 +303,58 @@ - bool posixFile::isFile() const - { - struct stat buf; -- return (::stat(m_nativePath.c_str(), &buf) == 0 && S_ISREG(buf.st_mode)); -+ -+ if (::stat(m_nativePath.c_str(), &buf) == -1) -+ { -+ posixFileSystemFactory::reportError(m_path, errno); -+ return false; -+ } -+ -+ return S_ISREG(buf.st_mode); - } - - - bool posixFile::isDirectory() const - { - struct stat buf; -- return (::stat(m_nativePath.c_str(), &buf) == 0 && S_ISDIR(buf.st_mode)); -+ -+ if (::stat(m_nativePath.c_str(), &buf) == -1) -+ { -+ posixFileSystemFactory::reportError(m_path, errno); -+ return false; -+ } -+ -+ return S_ISDIR(buf.st_mode); - } - - - bool posixFile::canRead() const - { - struct stat buf; -- return (::stat(m_nativePath.c_str(), &buf) == 0 && -- S_ISREG(buf.st_mode) && -- ::access(m_nativePath.c_str(), R_OK | F_OK) == 0); -+ -+ if (::stat(m_nativePath.c_str(), &buf) == -1) -+ { -+ posixFileSystemFactory::reportError(m_path, errno); -+ return false; -+ } -+ -+ return S_ISREG(buf.st_mode) && -+ ::access(m_nativePath.c_str(), R_OK | F_OK) == 0; - } - - - bool posixFile::canWrite() const - { - struct stat buf; -- return (::stat(m_nativePath.c_str(), &buf) == 0 && -- S_ISREG(buf.st_mode) && -- ::access(m_nativePath.c_str(), W_OK | F_OK) == 0); -+ -+ if (::stat(m_nativePath.c_str(), &buf) == -1) -+ { -+ posixFileSystemFactory::reportError(m_path, errno); -+ return false; -+ } -+ -+ return S_ISREG(buf.st_mode) && -+ ::access(m_nativePath.c_str(), W_OK | F_OK) == 0; - } - - -@@ -290,7 +362,7 @@ - { - struct stat buf; - -- if (::stat(m_nativePath.c_str(), &buf) != 0) -+ if (::stat(m_nativePath.c_str(), &buf) == -1) - posixFileSystemFactory::reportError(m_path, errno); - - return static_cast (buf.st_size); -@@ -323,7 +395,14 @@ - { - const vmime::string newNativePath = posixFileSystemFactory::pathToStringImpl(newName); - -- if (::rename(m_nativePath.c_str(), newNativePath.c_str()) != 0) -+ posixFile dest(newName); -+ -+ if (isDirectory()) -+ dest.createDirectory(); -+ else -+ dest.createFile(); -+ -+ if (::rename(m_nativePath.c_str(), newNativePath.c_str()) == -1) - posixFileSystemFactory::reportError(m_path, errno); - - m_path = newName; -@@ -335,17 +414,17 @@ - { - struct stat buf; - -- if (::stat(m_nativePath.c_str(), &buf) != 0) -+ if (::stat(m_nativePath.c_str(), &buf) == -1) - posixFileSystemFactory::reportError(m_path, errno); - - if (S_ISDIR(buf.st_mode)) - { -- if (::rmdir(m_nativePath.c_str()) != 0) -+ if (::rmdir(m_nativePath.c_str()) == -1) - posixFileSystemFactory::reportError(m_path, errno); - } - else if (S_ISREG(buf.st_mode)) - { -- if (::unlink(m_nativePath.c_str()) != 0) -+ if (::unlink(m_nativePath.c_str()) == -1) - posixFileSystemFactory::reportError(m_path, errno); - } - } -@@ -384,7 +463,7 @@ - if (!path.isEmpty() && recursive) - createDirectoryImpl(fullPath, path.getParent(), true); - -- if (::mkdir(nativePath.c_str(), 0750) != 0) -+ if (::mkdir(nativePath.c_str(), 0750) == -1) - posixFileSystemFactory::reportError(fullPath, errno); - } - -@@ -487,7 +566,9 @@ - case ENOMEM: desc = "ENOMEM: insufficient kernel memory."; break; - case EMFILE: desc = "ENFILE: limit on number of files open by the process has been reached."; break; - case ENFILE: desc = "ENFILE: limit on number of files open on the system has been reached."; break; -+#ifndef AIX - case ENOTEMPTY: desc = "ENOTEMPTY: directory is not empty."; break; -+#endif - - default: - -diff -urN a/src/platforms/posix/posixHandler.cpp b/src/platforms/posix/posixHandler.cpp ---- a/src/platforms/posix/posixHandler.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/platforms/posix/posixHandler.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -36,6 +36,11 @@ - #include - - #include -+#include -+ -+#if VMIME_HAVE_PTHREAD -+# include -+#endif // VMIME_HAVE_PTHREAD - - /* - #ifdef _POSIX_PRIORITY_SCHEDULING -@@ -44,6 +49,43 @@ - */ - - -+#if VMIME_HAVE_PTHREAD -+ -+namespace -+{ -+ // This construction ensures mutex will be initialized in compile-time -+ // and will be available any time in the runtime. -+ pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; -+ -+ // Helper lock, to be exception safe all the time. -+ class PLockHelper -+ { -+ public: -+ -+ PLockHelper() -+ { -+ if (pthread_mutex_lock(&g_mutex) != 0) -+ assert(!"unable to lock mutex - thread safety's void"); -+ } -+ -+ ~PLockHelper() -+ { -+ if (pthread_mutex_unlock(&g_mutex) != 0) -+ assert(!"unable to unlock mutex - application's dead..."); -+ } -+ -+ private: -+ -+ // Object cannot be copied -+ PLockHelper(const PLockHelper&); -+ const PLockHelper& operator=(const PLockHelper&); -+ }; -+ -+} // unnamed namespace -+ -+#endif // VMIME_HAVE_PTHREAD -+ -+ - namespace vmime { - namespace platforms { - namespace posix { -@@ -55,18 +97,14 @@ - m_socketFactory = vmime::create (); - #endif - #if VMIME_HAVE_FILESYSTEM_FEATURES -- m_fileSysFactory = new posixFileSystemFactory(); -- m_childProcFactory = new posixChildProcessFactory(); -+ m_fileSysFactory = vmime::create (); -+ m_childProcFactory = vmime::create (); - #endif - } - - - posixHandler::~posixHandler() - { --#if VMIME_HAVE_FILESYSTEM_FEATURES -- delete (m_fileSysFactory); -- delete (m_childProcFactory); --#endif - } - - -@@ -113,6 +151,8 @@ - - const vmime::charset posixHandler::getLocaleCharset() const - { -+ const PLockHelper lock; -+ - const char* prevLocale = ::setlocale(LC_ALL, ""); - vmime::charset ch(::nl_langinfo(CODESET)); - ::setlocale(LC_ALL, prevLocale); -@@ -173,9 +213,9 @@ - - #if VMIME_HAVE_MESSAGING_FEATURES - --ref posixHandler::getSocketFactory() const -+ref posixHandler::getSocketFactory() - { -- return m_socketFactory.dynamicCast (); -+ return m_socketFactory; - } - - #endif -@@ -183,15 +223,15 @@ - - #if VMIME_HAVE_FILESYSTEM_FEATURES - --vmime::utility::fileSystemFactory* posixHandler::getFileSystemFactory() const -+ref posixHandler::getFileSystemFactory() - { -- return (m_fileSysFactory); -+ return m_fileSysFactory; - } - - --vmime::utility::childProcessFactory* posixHandler::getChildProcessFactory() const -+ref posixHandler::getChildProcessFactory() - { -- return (m_childProcFactory); -+ return m_childProcFactory; - } - - #endif -diff -urN a/src/platforms/posix/posixSocket.cpp b/src/platforms/posix/posixSocket.cpp ---- a/src/platforms/posix/posixSocket.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/platforms/posix/posixSocket.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -217,6 +217,12 @@ - } - - -+posixSocket::size_type posixSocket::getBlockSize() const -+{ -+ return 16384; // 16 KB -+} -+ -+ - void posixSocket::receive(vmime::string& buffer) - { - const int size = receiveRaw(m_buffer, sizeof(m_buffer)); -@@ -224,7 +230,7 @@ - } - - --int posixSocket::receiveRaw(char* buffer, const int count) -+posixSocket::size_type posixSocket::receiveRaw(char* buffer, const size_type count) - { - const int ret = ::recv(m_desc, buffer, count, 0); - -@@ -252,9 +258,9 @@ - } - - --void posixSocket::sendRaw(const char* buffer, const int count) -+void posixSocket::sendRaw(const char* buffer, const size_type count) - { -- int size = count; -+ size_type size = count; - - while (size > 0) - { -diff -urN a/src/platforms/windows/windowsFile.cpp b/src/platforms/windows/windowsFile.cpp ---- a/src/platforms/windows/windowsFile.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/platforms/windows/windowsFile.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://vmime.sourceforge.net) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -268,7 +268,7 @@ - return true; - } - --const windowsFile::length_type windowsFile::getLength() -+windowsFile::length_type windowsFile::getLength() - { - HANDLE hFile = CreateFile( - m_nativePath.c_str(), -@@ -464,7 +464,7 @@ - SetFilePointer(m_hFile, 0, NULL, FILE_BEGIN); - } - --const vmime::utility::stream::size_type windowsFileReaderInputStream::read(value_type* const data, const size_type count) -+vmime::utility::stream::size_type windowsFileReaderInputStream::read(value_type* const data, const size_type count) - { - DWORD dwBytesRead; - if (!ReadFile(m_hFile, (LPVOID)data, (DWORD)count, &dwBytesRead, NULL)) -@@ -472,7 +472,7 @@ - return dwBytesRead; - } - --const vmime::utility::stream::size_type windowsFileReaderInputStream::skip(const size_type count) -+vmime::utility::stream::size_type windowsFileReaderInputStream::skip(const size_type count) - { - DWORD dwCurPos = SetFilePointer(m_hFile, 0, NULL, FILE_CURRENT); - DWORD dwNewPos = SetFilePointer(m_hFile, (LONG)count, NULL, FILE_CURRENT); -diff -urN a/src/platforms/windows/windowsHandler.cpp b/src/platforms/windows/windowsHandler.cpp ---- a/src/platforms/windows/windowsHandler.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/platforms/windows/windowsHandler.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://vmime.sourceforge.net) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -49,17 +49,13 @@ - m_socketFactory = vmime::create (); - #endif - #if VMIME_HAVE_FILESYSTEM_FEATURES -- m_fileSysFactory = new windowsFileSystemFactory(); -+ m_fileSysFactory = vmime::create (); - #endif - } - - - windowsHandler::~windowsHandler() - { --#if VMIME_HAVE_FILESYSTEM_FEATURES -- delete (m_fileSysFactory); --#endif -- - WSACleanup(); - } - -@@ -240,9 +236,9 @@ - - #if VMIME_HAVE_MESSAGING_FEATURES - --ref windowsHandler::getSocketFactory() const -+ref windowsHandler::getSocketFactory() - { -- return m_socketFactory.dynamicCast (); -+ return m_socketFactory; - } - - #endif -@@ -250,13 +246,13 @@ - - #if VMIME_HAVE_FILESYSTEM_FEATURES - --vmime::utility::fileSystemFactory* windowsHandler::getFileSystemFactory() const -+ref windowsHandler::getFileSystemFactory() - { -- return (m_fileSysFactory); -+ return m_fileSysFactory; - } - - --vmime::utility::childProcessFactory* windowsHandler::getChildProcessFactory() const -+ref windowsHandler::getChildProcessFactory() - { - // TODO: Not implemented - return (NULL); -diff -urN a/src/platforms/windows/windowsSocket.cpp b/src/platforms/windows/windowsSocket.cpp ---- a/src/platforms/windows/windowsSocket.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/platforms/windows/windowsSocket.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://vmime.sourceforge.net) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -121,6 +121,12 @@ - } - - -+windowsSocket::size_type windowsSocket::getBlockSize() const -+{ -+ return 16384; // 16 KB -+} -+ -+ - void windowsSocket::receive(vmime::string& buffer) - { - int ret = ::recv(m_desc, m_buffer, sizeof(m_buffer), 0); -@@ -137,7 +143,7 @@ - } - - --int windowsSocket::receiveRaw(char* buffer, const int count) -+windowsSocket::size_type windowsSocket::receiveRaw(char* buffer, const size_type count) - { - int ret = ::recv(m_desc, buffer, count, 0); - -@@ -159,7 +165,7 @@ - } - - --void windowsSocket::sendRaw(const char* buffer, const int count) -+void windowsSocket::sendRaw(const char* buffer, const size_type count) - { - ::send(m_desc, buffer, count, 0); - } -diff -urN a/src/propertySet.cpp b/src/propertySet.cpp ---- a/src/propertySet.cpp 2008-10-12 11:48:09.000000000 +0200 -+++ b/src/propertySet.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/relay.cpp b/src/relay.cpp ---- a/src/relay.cpp 2008-10-12 11:50:43.000000000 +0200 -+++ b/src/relay.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/cert/certificateChain.cpp b/src/security/cert/certificateChain.cpp ---- a/src/security/cert/certificateChain.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/security/cert/certificateChain.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/cert/defaultCertificateVerifier.cpp b/src/security/cert/defaultCertificateVerifier.cpp ---- a/src/security/cert/defaultCertificateVerifier.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/security/cert/defaultCertificateVerifier.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/cert/X509Certificate.cpp b/src/security/cert/X509Certificate.cpp ---- a/src/security/cert/X509Certificate.cpp 2008-10-12 11:41:13.000000000 +0200 -+++ b/src/security/cert/X509Certificate.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/defaultAuthenticator.cpp b/src/security/defaultAuthenticator.cpp ---- a/src/security/defaultAuthenticator.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/security/defaultAuthenticator.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/digest/md5/md5MessageDigest.cpp b/src/security/digest/md5/md5MessageDigest.cpp ---- a/src/security/digest/md5/md5MessageDigest.cpp 2008-10-12 11:24:44.000000000 +0200 -+++ b/src/security/digest/md5/md5MessageDigest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/digest/messageDigest.cpp b/src/security/digest/messageDigest.cpp ---- a/src/security/digest/messageDigest.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/security/digest/messageDigest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/digest/messageDigestFactory.cpp b/src/security/digest/messageDigestFactory.cpp ---- a/src/security/digest/messageDigestFactory.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/security/digest/messageDigestFactory.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/digest/sha1/sha1MessageDigest.cpp b/src/security/digest/sha1/sha1MessageDigest.cpp ---- a/src/security/digest/sha1/sha1MessageDigest.cpp 2008-10-12 11:24:21.000000000 +0200 -+++ b/src/security/digest/sha1/sha1MessageDigest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -27,6 +27,7 @@ - #include "vmime/security/digest/sha1/sha1MessageDigest.hpp" - - #include -+#include - - - namespace vmime { -@@ -161,8 +162,8 @@ - i = j = 0; - - std::memset(m_buffer, 0, 64); -- std::memset(m_state, 0, 20); -- std::memset(m_count, 0, 8); -+ std::memset(m_state, 0, 5 * sizeof(unsigned long)); -+ std::memset(m_count, 0, 2 * sizeof(unsigned long)); - std::memset(&finalcount, 0, 8); - } - -@@ -201,6 +202,8 @@ - unsigned long l[16]; - } CHAR64LONG16; - -+ assert(sizeof(unsigned long) == 4); -+ - CHAR64LONG16* block; - static unsigned char workspace[64]; - -diff -urN a/src/security/sasl/builtinSASLMechanism.cpp b/src/security/sasl/builtinSASLMechanism.cpp ---- a/src/security/sasl/builtinSASLMechanism.cpp 2008-10-12 11:39:59.000000000 +0200 -+++ b/src/security/sasl/builtinSASLMechanism.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/sasl/defaultSASLAuthenticator.cpp b/src/security/sasl/defaultSASLAuthenticator.cpp ---- a/src/security/sasl/defaultSASLAuthenticator.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/security/sasl/defaultSASLAuthenticator.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/sasl/SASLContext.cpp b/src/security/sasl/SASLContext.cpp ---- a/src/security/sasl/SASLContext.cpp 2008-10-12 15:52:16.000000000 +0200 -+++ b/src/security/sasl/SASLContext.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/sasl/SASLMechanismFactory.cpp b/src/security/sasl/SASLMechanismFactory.cpp ---- a/src/security/sasl/SASLMechanismFactory.cpp 2008-10-12 11:38:33.000000000 +0200 -+++ b/src/security/sasl/SASLMechanismFactory.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/sasl/SASLSession.cpp b/src/security/sasl/SASLSession.cpp ---- a/src/security/sasl/SASLSession.cpp 2008-10-12 11:37:11.000000000 +0200 -+++ b/src/security/sasl/SASLSession.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/security/sasl/SASLSocket.cpp b/src/security/sasl/SASLSocket.cpp ---- a/src/security/sasl/SASLSocket.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/security/sasl/SASLSocket.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -69,6 +69,12 @@ - } - - -+SASLSocket::size_type SASLSocket::getBlockSize() const -+{ -+ return m_wrapped->getBlockSize(); -+} -+ -+ - void SASLSocket::receive(string& buffer) - { - const int n = receiveRaw(m_recvBuffer, sizeof(m_recvBuffer)); -@@ -77,7 +83,7 @@ - } - - --int SASLSocket::receiveRaw(char* buffer, const int count) -+SASLSocket::size_type SASLSocket::receiveRaw(char* buffer, const size_type count) - { - if (m_pendingLen != 0) - { -@@ -141,7 +147,7 @@ - } - - --void SASLSocket::sendRaw(const char* buffer, const int count) -+void SASLSocket::sendRaw(const char* buffer, const size_type count) - { - byte_t* output = 0; - int outputLen = 0; -diff -urN a/src/streamContentHandler.cpp b/src/streamContentHandler.cpp ---- a/src/streamContentHandler.cpp 2008-10-12 15:44:22.000000000 +0200 -+++ b/src/streamContentHandler.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/stringContentHandler.cpp b/src/stringContentHandler.cpp ---- a/src/stringContentHandler.cpp 2008-10-12 15:42:48.000000000 +0200 -+++ b/src/stringContentHandler.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/text.cpp b/src/text.cpp ---- a/src/text.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/text.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -91,21 +91,6 @@ - } - - --#if VMIME_WIDE_CHAR_SUPPORT -- --const wstring text::getDecodedText() const --{ -- wstring out; -- -- for (std::vector >::const_iterator i = m_words.begin() ; i != m_words.end() ; ++i) -- out += (*i)->getDecodedText(); -- -- return (out); --} -- --#endif -- -- - void text::copyFrom(const component& other) - { - const text& t = dynamic_cast (other); -diff -urN a/src/textPartFactory.cpp b/src/textPartFactory.cpp ---- a/src/textPartFactory.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/src/textPartFactory.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/datetimeUtils.cpp b/src/utility/datetimeUtils.cpp ---- a/src/utility/datetimeUtils.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/utility/datetimeUtils.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -256,7 +256,7 @@ - } - - --int datetimeUtils::getWeekOfYear(const int year, const int month, const int day) -+int datetimeUtils::getWeekOfYear(const int year, const int month, const int day, const bool iso) - { - // Algorithm from http://personal.ecu.edu/mccartyr/ISOwdALG.txt - -@@ -322,6 +322,9 @@ - WeekNumber -= 1; - } - -+ if (!iso && (WeekNumber == 1 && month == 12)) -+ WeekNumber = 53; -+ - return WeekNumber; - } - -diff -urN a/src/utility/encoder/b64Encoder.cpp b/src/utility/encoder/b64Encoder.cpp ---- a/src/utility/encoder/b64Encoder.cpp 2008-10-12 15:39:42.000000000 +0200 -+++ b/src/utility/encoder/b64Encoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/binaryEncoder.cpp b/src/utility/encoder/binaryEncoder.cpp ---- a/src/utility/encoder/binaryEncoder.cpp 2008-10-12 15:28:06.000000000 +0200 -+++ b/src/utility/encoder/binaryEncoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/defaultEncoder.cpp b/src/utility/encoder/defaultEncoder.cpp ---- a/src/utility/encoder/defaultEncoder.cpp 2008-10-12 15:25:06.000000000 +0200 -+++ b/src/utility/encoder/defaultEncoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/eightBitEncoder.cpp b/src/utility/encoder/eightBitEncoder.cpp ---- a/src/utility/encoder/eightBitEncoder.cpp 2008-10-12 15:23:16.000000000 +0200 -+++ b/src/utility/encoder/eightBitEncoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/encoder.cpp b/src/utility/encoder/encoder.cpp ---- a/src/utility/encoder/encoder.cpp 2008-10-12 15:15:06.000000000 +0200 -+++ b/src/utility/encoder/encoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/encoderFactory.cpp b/src/utility/encoder/encoderFactory.cpp ---- a/src/utility/encoder/encoderFactory.cpp 2008-10-12 15:38:01.000000000 +0200 -+++ b/src/utility/encoder/encoderFactory.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/qpEncoder.cpp b/src/utility/encoder/qpEncoder.cpp ---- a/src/utility/encoder/qpEncoder.cpp 2008-10-12 15:32:35.000000000 +0200 -+++ b/src/utility/encoder/qpEncoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/sevenBitEncoder.cpp b/src/utility/encoder/sevenBitEncoder.cpp ---- a/src/utility/encoder/sevenBitEncoder.cpp 2008-10-12 15:48:20.000000000 +0200 -+++ b/src/utility/encoder/sevenBitEncoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/encoder/uuEncoder.cpp b/src/utility/encoder/uuEncoder.cpp ---- a/src/utility/encoder/uuEncoder.cpp 2008-10-12 15:36:45.000000000 +0200 -+++ b/src/utility/encoder/uuEncoder.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/filteredStream.cpp b/src/utility/filteredStream.cpp ---- a/src/utility/filteredStream.cpp 2008-10-12 11:09:18.000000000 +0200 -+++ b/src/utility/filteredStream.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -30,6 +30,22 @@ - namespace utility { - - -+// filteredInputStream -+ -+stream::size_type filteredInputStream::getBlockSize() -+{ -+ return std::min(inputStream::getBlockSize(), getPreviousInputStream().getBlockSize()); -+} -+ -+ -+// filteredOutputStream -+ -+stream::size_type filteredOutputStream::getBlockSize() -+{ -+ return std::min(outputStream::getBlockSize(), getNextOutputStream().getBlockSize()); -+} -+ -+ - // dotFilteredInputStream - - dotFilteredInputStream::dotFilteredInputStream(inputStream& is) -@@ -215,8 +231,8 @@ - - if (previousChar == '\r') - { -- if (pos != data) -- m_stream.write(start, pos - 1 - data); // do not write \r -+ if (pos != start) -+ m_stream.write(start, pos - 1 - start); // do not write \r - - m_stream.write("\n", 1); - -diff -urN a/src/utility/path.cpp b/src/utility/path.cpp ---- a/src/utility/path.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/utility/path.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/progressListener.cpp b/src/utility/progressListener.cpp ---- a/src/utility/progressListener.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/utility/progressListener.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/random.cpp b/src/utility/random.cpp ---- a/src/utility/random.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/utility/random.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/smartPtr.cpp b/src/utility/smartPtr.cpp ---- a/src/utility/smartPtr.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/utility/smartPtr.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/smartPtrInt.cpp b/src/utility/smartPtrInt.cpp ---- a/src/utility/smartPtrInt.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/utility/smartPtrInt.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/stream.cpp b/src/utility/stream.cpp ---- a/src/utility/stream.cpp 2008-10-12 11:10:12.000000000 +0200 -+++ b/src/utility/stream.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -38,7 +38,7 @@ - - // stream - --stream::size_type stream::getBlockSize() const -+stream::size_type stream::getBlockSize() - { - return 32768; // 32 KB - } -@@ -468,9 +468,9 @@ - } - - --stream::size_type outputStreamSocketAdapter::getBlockSize() const -+stream::size_type outputStreamSocketAdapter::getBlockSize() - { -- return 16384; // 16 KB -+ return m_socket.getBlockSize(); - } - - -@@ -511,9 +511,9 @@ - } - - --stream::size_type inputStreamSocketAdapter::getBlockSize() const -+stream::size_type inputStreamSocketAdapter::getBlockSize() - { -- return 16384; // 16 KB -+ return m_socket.getBlockSize(); - } - - -diff -urN a/src/utility/stringProxy.cpp b/src/utility/stringProxy.cpp ---- a/src/utility/stringProxy.cpp 2008-10-12 11:10:31.000000000 +0200 -+++ b/src/utility/stringProxy.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/stringUtils.cpp b/src/utility/stringUtils.cpp ---- a/src/utility/stringUtils.cpp 2008-10-12 11:11:24.000000000 +0200 -+++ b/src/utility/stringUtils.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -142,7 +142,7 @@ - { - if (parserHelpers::isAscii(*i)) - { -- if (*i != '=' || *(i + 1) != '?') // To avoid bad behaviour... -+ if (*i != '=' || ((i + 1) != end && *(i + 1) != '?')) // To avoid bad behaviour... - ++count; - } - } -diff -urN a/src/utility/url.cpp b/src/utility/url.cpp ---- a/src/utility/url.cpp 2008-10-12 10:54:31.000000000 +0200 -+++ b/src/utility/url.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/utility/urlUtils.cpp b/src/utility/urlUtils.cpp ---- a/src/utility/urlUtils.cpp 2008-10-12 11:52:31.000000000 +0200 -+++ b/src/utility/urlUtils.cpp 2010-02-09 14:34:52.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/src/word.cpp b/src/word.cpp ---- a/src/word.cpp 2008-10-12 15:45:39.000000000 +0200 -+++ b/src/word.cpp 2010-02-10 10:56:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -352,10 +352,23 @@ - noEncoding = false; - } - -- if (noEncoding) -+ // If possible and requested (with flag), quote the buffer (no folding is performed). -+ // Quoting is possible if and only if: -+ // - the whole buffer is ASCII-only -+ // - the buffer does not contain quoting character (") -+ // - there is enough remaining space on the current line to hold the whole buffer -+ if (!noEncoding && -+ (flags & text::QUOTE_IF_POSSIBLE) && -+ asciiCount == m_buffer.length() && -+ m_buffer.find('"') == string::npos && -+ (curLineLength + 2 /* 2 x " */ + m_buffer.length()) < maxLineLength) -+ { -+ os << '"' << m_buffer << '"'; -+ curLineLength += 2 + m_buffer.length(); -+ } -+ // We will fold lines without encoding them. -+ else if (noEncoding) - { -- // We will fold lines without encoding them. -- - string::const_iterator lastWSpos = m_buffer.end(); // last white-space position - string::const_iterator curLineStart = m_buffer.begin(); // current line start - -@@ -463,7 +476,7 @@ - - os << string(curLineStart, lastWSpos); - -- if (lastWSpos > curLineStart && std::isspace(*(lastWSpos - 1))) -+ if (lastWSpos > curLineStart && parserHelpers::isSpace(*(lastWSpos - 1))) - state->lastCharIsSpace = true; - else - state->lastCharIsSpace = false; -@@ -609,20 +622,6 @@ - } - - --#if VMIME_WIDE_CHAR_SUPPORT -- --const wstring word::getDecodedText() const --{ -- wstring out; -- -- charset::decode(m_buffer, out, m_charset); -- -- return (out); --} -- --#endif -- -- - word& word::operator=(const word& w) - { - m_buffer = w.m_buffer; -@@ -699,6 +698,12 @@ - } - - -+bool word::isEmpty() const -+{ -+ return m_buffer.empty(); -+} -+ -+ - void word::setBuffer(const string& buffer) - { - m_buffer = buffer; -diff -urN a/src/wordEncoder.cpp b/src/wordEncoder.cpp ---- a/src/wordEncoder.cpp 2008-10-12 15:47:14.000000000 +0200 -+++ b/src/wordEncoder.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/charset/main.cpp b/tests/charset/main.cpp ---- a/tests/charset/main.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/charset/main.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/misc/importanceHelperTest.cpp b/tests/misc/importanceHelperTest.cpp ---- a/tests/misc/importanceHelperTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/misc/importanceHelperTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/net/maildir/maildirStoreTest.cpp b/tests/net/maildir/maildirStoreTest.cpp ---- a/tests/net/maildir/maildirStoreTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/net/maildir/maildirStoreTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -322,12 +322,28 @@ - - void testRenameFolder_KMail() - { -- testRenameFolderImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); -+ try -+ { -+ testRenameFolderImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); -+ } -+ catch (vmime::exception& e) -+ { -+ std::cerr << e; -+ throw e; -+ } - } - - void testRenameFolder_Courier() - { -- testRenameFolderImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); -+ try -+ { -+ testRenameFolderImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); -+ } -+ catch (vmime::exception& e) -+ { -+ std::cerr << e; -+ throw e; -+ } - } - - void testRenameFolderImpl(const vmime::string* const dirs, const vmime::string* const files) -@@ -485,7 +501,7 @@ - - const vmime::utility::url getStoreURL() - { -- vmime::utility::fileSystemFactory* fsf = -+ vmime::ref fsf = - vmime::platform::getHandler()->getFileSystemFactory(); - - vmime::utility::url url(std::string("maildir://localhost") -@@ -496,7 +512,7 @@ - - void createMaildir(const vmime::string* const dirs, const vmime::string* const files) - { -- vmime::utility::fileSystemFactory* fsf = -+ vmime::ref fsf = - vmime::platform::getHandler()->getFileSystemFactory(); - - vmime::ref rootDir = fsf->create(m_tempPath); -@@ -528,7 +544,7 @@ - - void destroyMaildir() - { -- vmime::utility::fileSystemFactory* fsf = -+ vmime::ref fsf = - vmime::platform::getHandler()->getFileSystemFactory(); - - recursiveDelete(fsf->create(m_tempPath)); -diff -urN a/tests/net/smtp/SMTPResponseTest.cpp b/tests/net/smtp/SMTPResponseTest.cpp ---- a/tests/net/smtp/SMTPResponseTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/net/smtp/SMTPResponseTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/net/smtp/SMTPTransportTest.cpp b/tests/net/smtp/SMTPTransportTest.cpp ---- a/tests/net/smtp/SMTPTransportTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/net/smtp/SMTPTransportTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/attachmentHelperTest.cpp b/tests/parser/attachmentHelperTest.cpp ---- a/tests/parser/attachmentHelperTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/attachmentHelperTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/bodyPartTest.cpp b/tests/parser/bodyPartTest.cpp ---- a/tests/parser/bodyPartTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/bodyPartTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/charsetTest.cpp b/tests/parser/charsetTest.cpp ---- a/tests/parser/charsetTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/charsetTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/datetimeTest.cpp b/tests/parser/datetimeTest.cpp ---- a/tests/parser/datetimeTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/datetimeTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/dispositionTest.cpp b/tests/parser/dispositionTest.cpp ---- a/tests/parser/dispositionTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/dispositionTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/headerTest.cpp b/tests/parser/headerTest.cpp ---- a/tests/parser/headerTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/headerTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/htmlTextPartTest.cpp b/tests/parser/htmlTextPartTest.cpp ---- a/tests/parser/htmlTextPartTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/htmlTextPartTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/mailboxTest.cpp b/tests/parser/mailboxTest.cpp ---- a/tests/parser/mailboxTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/mailboxTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/mediaTypeTest.cpp b/tests/parser/mediaTypeTest.cpp ---- a/tests/parser/mediaTypeTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/mediaTypeTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/messageIdSequenceTest.cpp b/tests/parser/messageIdSequenceTest.cpp ---- a/tests/parser/messageIdSequenceTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/messageIdSequenceTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/messageIdTest.cpp b/tests/parser/messageIdTest.cpp ---- a/tests/parser/messageIdTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/messageIdTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/parameterTest.cpp b/tests/parser/parameterTest.cpp ---- a/tests/parser/parameterTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/parameterTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -32,7 +32,9 @@ - - VMIME_TEST_LIST_BEGIN - VMIME_TEST(testParse) -+ VMIME_TEST(testParseRFC2231) - VMIME_TEST(testGenerate) -+ VMIME_TEST(testGenerateRFC2231) - VMIME_TEST(testNonStandardEncodedParam) - VMIME_TEST_LIST_END - -@@ -134,57 +136,60 @@ - VASSERT_EQ("7.1", 1, p7.getParameterCount()); - VASSERT_EQ("7.2", "param1", PARAM_NAME(p7, 0)); - VASSERT_EQ("7.3", "this is a slash: \"\\\"", PARAM_VALUE(p7, 0)); -+ } - -+ void testParseRFC2231() -+ { - // Extended parameter with charset specified in more than one - // section (this is forbidden by RFC, but is should not fail) -- parameterizedHeaderField p8; -- p8.parse("X; param1*0*=charset1'language1'value1;\r\n" -- " param1*1*=charset2'language2'value2;"); -- -- VASSERT_EQ("8.1", 1, p8.getParameterCount()); -- VASSERT_EQ("8.2", "param1", PARAM_NAME(p8, 0)); -- VASSERT_EQ("8.3", "charset1", PARAM_CHARSET(p8, 0)); -- VASSERT_EQ("8.4", "value1charset2'language2'value2", PARAM_BUFFER(p8, 0)); -+ parameterizedHeaderField p1; -+ p1.parse("X; param1*0*=charset1'language1'value1;\r\n" -+ " param1*1*=charset2'language2'value2;"); -+ -+ VASSERT_EQ("1.1", 1, p1.getParameterCount()); -+ VASSERT_EQ("1.2", "param1", PARAM_NAME(p1, 0)); -+ VASSERT_EQ("1.3", "charset1", PARAM_CHARSET(p1, 0)); -+ VASSERT_EQ("1.4", "value1charset2'language2'value2", PARAM_BUFFER(p1, 0)); - - // Charset not specified in the first section (that is not encoded), - // but specified in the second one (legal) -- parameterizedHeaderField p9; -- p9.parse("X; param1*0=value1;\r\n" -- " param1*1*=charset'language'value2;"); -- -- VASSERT_EQ("9.1", 1, p9.getParameterCount()); -- VASSERT_EQ("9.2", "param1", PARAM_NAME(p9, 0)); -- VASSERT_EQ("9.3", "charset", PARAM_CHARSET(p9, 0)); -- VASSERT_EQ("9.4", "value1value2", PARAM_BUFFER(p9, 0)); -+ parameterizedHeaderField p2; -+ p2.parse("X; param1*0=value1;\r\n" -+ " param1*1*=charset'language'value2;"); -+ -+ VASSERT_EQ("2.1", 1, p2.getParameterCount()); -+ VASSERT_EQ("2.2", "param1", PARAM_NAME(p2, 0)); -+ VASSERT_EQ("2.3", "charset", PARAM_CHARSET(p2, 0)); -+ VASSERT_EQ("2.4", "value1value2", PARAM_BUFFER(p2, 0)); - - // Characters prefixed with '%' in a simple (not extended) section - // should not be decoded -- parameterizedHeaderField p10; -- p10.parse("X; param1=val%20ue1"); -+ parameterizedHeaderField p3; -+ p3.parse("X; param1=val%20ue1"); - -- VASSERT_EQ("10.1", 1, p10.getParameterCount()); -- VASSERT_EQ("10.2", "param1", PARAM_NAME(p10, 0)); -- VASSERT_EQ("10.3", "val%20ue1", PARAM_VALUE(p10, 0)); -+ VASSERT_EQ("3.1", 1, p3.getParameterCount()); -+ VASSERT_EQ("3.2", "param1", PARAM_NAME(p3, 0)); -+ VASSERT_EQ("3.3", "val%20ue1", PARAM_VALUE(p3, 0)); - - // Multiple sections + charset specified and encoding -- parameterizedHeaderField p11; -- p11.parse("X; param1*0*=charset'language'value1a%20;" -- " param1*1*=value1b%20;" -- " param1*2=value1c"); -- -- VASSERT_EQ("11.1", 1, p11.getParameterCount()); -- VASSERT_EQ("11.2", "param1", PARAM_NAME(p11, 0)); -- VASSERT_EQ("11.3", "charset", PARAM_CHARSET(p11, 0)); -- VASSERT_EQ("11.4", "value1a value1b value1c", PARAM_BUFFER(p11, 0)); -+ parameterizedHeaderField p4; -+ p4.parse("X; param1*0*=charset'language'value1a%20;" -+ " param1*1*=value1b%20;" -+ " param1*2=value1c"); -+ -+ VASSERT_EQ("4.1", 1, p4.getParameterCount()); -+ VASSERT_EQ("4.2", "param1", PARAM_NAME(p4, 0)); -+ VASSERT_EQ("4.3", "charset", PARAM_CHARSET(p4, 0)); -+ VASSERT_EQ("4.4", "value1a value1b value1c", PARAM_BUFFER(p4, 0)); - - // No charset specified: defaults to US-ASCII -- parameterizedHeaderField p12; -- p12.parse("X; param1*='language'value1"); -+ parameterizedHeaderField p5; -+ p5.parse("X; param1*='language'value1"); - -- VASSERT_EQ("12.1", 1, p12.getParameterCount()); -- VASSERT_EQ("12.2", "param1", PARAM_NAME(p12, 0)); -- VASSERT_EQ("12.3", "us-ascii", PARAM_CHARSET(p12, 0)); -- VASSERT_EQ("12.4", "value1", PARAM_BUFFER(p12, 0)); -+ VASSERT_EQ("5.1", 1, p5.getParameterCount()); -+ VASSERT_EQ("5.2", "param1", PARAM_NAME(p5, 0)); -+ VASSERT_EQ("5.3", "us-ascii", PARAM_CHARSET(p5, 0)); -+ VASSERT_EQ("5.4", "value1", PARAM_BUFFER(p5, 0)); - } - - void testGenerate() -@@ -206,21 +211,24 @@ - p2b.appendParameter(vmime::create ("param1", "va\\lue\"1")); - - VASSERT_EQ("2b", "F: X; param1=\"va\\\\lue\\\"1\"", p2b.generate()); -+ } - -+ void testGenerateRFC2231() -+ { - // Extended parameter with charset specifier -- parameterizedHeaderField p3; -- p3.appendParameter(vmime::create ("param1", -+ parameterizedHeaderField p1; -+ p1.appendParameter(vmime::create ("param1", - vmime::word("value 1\xe9", vmime::charset("charset")))); - -- VASSERT_EQ("3", "F: X; param1=\"value 1\";param1*=charset''value%201%E9", p3.generate()); -+ VASSERT_EQ("1", "F: X; param1=\"value 1\";param1*=charset''value%201%E9", p1.generate()); - - // Value that spans on multiple lines -- parameterizedHeaderField p4; -- p4.appendParameter(vmime::create ("param1", -+ parameterizedHeaderField p2; -+ p2.appendParameter(vmime::create ("param1", - vmime::word("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", - vmime::charset("charset")))); - -- VASSERT_EQ("4", "F: X; \r\n " -+ VASSERT_EQ("2", "F: X; \r\n " - "param1=abcdefghijklm;\r\n " - "param1*0*=charset''abc;\r\n " - "param1*1*=defghijkl;\r\n " -@@ -228,7 +236,23 @@ - "param1*3*=vwxyzABCD;\r\n " - "param1*4*=EFGHIJKLM;\r\n " - "param1*5*=NOPQRSTUV;\r\n " -- "param1*6*=WXYZ", p4.generate(25)); // max line length = 25 -+ "param1*6*=WXYZ", p2.generate(25)); // max line length = 25 -+ -+ // Non-ASCII parameter value -+ parameterizedHeaderField p3; -+ p3.appendParameter(vmime::create ("param1", -+ vmime::word("δσσσσσσσσσσσσσσσσσσσσδσδα δσαδσδσαδσαδασδασ δσαδασδσα δσαδασδσα δασδασδασ δασαχφδδσα 2008.doc", -+ vmime::charset("utf-8")))); -+ -+ VASSERT_EQ("3", "F: X; \r\n " -+ "param1=\" 2008.doc\";param1*0*=utf-8''%CE%B4%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " -+ "param1*1*=%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " -+ "param1*2*=%CE%B4%CF%83%CE%B4%CE%B1%20%CE%B4%CF%83%CE%B1%CE%B4%CF%83%CE%B4%CF;\r\n " -+ "param1*3*=%83%CE%B1%CE%B4%CF%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CE%B1%CF%83%20;\r\n " -+ "param1*4*=%CE%B4%CF%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CF%83%CE%B1%20%CE%B4%CF;\r\n " -+ "param1*5*=%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CF%83%CE%B1%20%CE%B4%CE%B1%CF%83;\r\n " -+ "param1*6*=%CE%B4%CE%B1%CF%83%CE%B4%CE%B1%CF%83%20%CE%B4%CE%B1%CF%83%CE%B1%CF;\r\n " -+ "param1*7*=%87%CF%86%CE%B4%CE%B4%CF%83%CE%B1%202008.doc", p3.generate(80)); - } - - void testNonStandardEncodedParam() -diff -urN a/tests/parser/pathTest.cpp b/tests/parser/pathTest.cpp ---- a/tests/parser/pathTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/pathTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/parser/textTest.cpp b/tests/parser/textTest.cpp ---- a/tests/parser/textTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/parser/textTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/security/digest/md5Test.cpp b/tests/security/digest/md5Test.cpp ---- a/tests/security/digest/md5Test.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/security/digest/md5Test.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/security/digest/sha1Test.cpp b/tests/security/digest/sha1Test.cpp ---- a/tests/security/digest/sha1Test.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/security/digest/sha1Test.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/testRunner.cpp b/tests/testRunner.cpp ---- a/tests/testRunner.cpp 2008-10-12 11:43:03.000000000 +0200 -+++ b/tests/testRunner.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/testUtils.cpp b/tests/testUtils.cpp ---- a/tests/testUtils.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/testUtils.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -4,7 +4,7 @@ - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -51,6 +51,12 @@ - } - - -+testSocket::size_type testSocket::getBlockSize() const -+{ -+ return 16384; -+} -+ -+ - void testSocket::receive(vmime::string& buffer) - { - buffer = m_inBuffer; -@@ -181,3 +187,61 @@ - return vmime::create (); - } - -+ -+ -+// Exception helper -+std::ostream& operator<<(std::ostream& os, const vmime::exception& e) -+{ -+ os << "* vmime::exceptions::" << e.name() << std::endl; -+ os << " what = " << e.what() << std::endl; -+ -+ // More information for special exceptions -+ if (dynamic_cast (&e)) -+ { -+ const vmime::exceptions::command_error& cee = -+ dynamic_cast (e); -+ -+ os << " command = " << cee.command() << std::endl; -+ os << " response = " << cee.response() << std::endl; -+ } -+ -+ if (dynamic_cast (&e)) -+ { -+ const vmime::exceptions::invalid_response& ir = -+ dynamic_cast (e); -+ -+ os << " response = " << ir.response() << std::endl; -+ } -+ -+ if (dynamic_cast (&e)) -+ { -+ const vmime::exceptions::connection_greeting_error& cgee = -+ dynamic_cast (e); -+ -+ os << " response = " << cgee.response() << std::endl; -+ } -+ -+ if (dynamic_cast (&e)) -+ { -+ const vmime::exceptions::authentication_error& aee = -+ dynamic_cast (e); -+ -+ os << " response = " << aee.response() << std::endl; -+ } -+ -+ if (dynamic_cast (&e)) -+ { -+ const vmime::exceptions::filesystem_exception& fse = -+ dynamic_cast (e); -+ -+ os << " path = " << vmime::platform::getHandler()-> -+ getFileSystemFactory()->pathToString(fse.path()) << std::endl; -+ } -+ -+ if (e.other() != NULL) -+ os << *e.other(); -+ -+ return os; -+} -+ -+ -diff -urN a/tests/testUtils.hpp b/tests/testUtils.hpp ---- a/tests/testUtils.hpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/testUtils.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -4,7 +4,7 @@ - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -216,6 +216,8 @@ - int receiveRaw(char* buffer, const int count); - void sendRaw(const char* buffer, const int count); - -+ size_type getBlockSize() const; -+ - /** Send data to client. - * - * @buffer data to send -@@ -303,3 +305,7 @@ - vmime::ref create(); - }; - -+ -+// Exception helper -+std::ostream& operator<<(std::ostream& os, const vmime::exception& e); -+ -diff -urN a/tests/utility/datetimeUtilsTest.cpp b/tests/utility/datetimeUtilsTest.cpp ---- a/tests/utility/datetimeUtilsTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/utility/datetimeUtilsTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -143,10 +143,11 @@ - { - VASSERT_EQ("1.1", 52, datetimeUtils::getWeekOfYear(2003, 12, 27)); - VASSERT_EQ("1.2", 52, datetimeUtils::getWeekOfYear(2003, 12, 28)); -- VASSERT_EQ("1.3", 1, datetimeUtils::getWeekOfYear(2003, 12, 29)); -- VASSERT_EQ("1.4", 1, datetimeUtils::getWeekOfYear(2004, 1, 4)); -- VASSERT_EQ("1.5", 2, datetimeUtils::getWeekOfYear(2004, 1, 5)); -- VASSERT_EQ("1.6", 2, datetimeUtils::getWeekOfYear(2004, 1, 11)); -+ VASSERT_EQ("1.3", 1, datetimeUtils::getWeekOfYear(2003, 12, 29, true)); -+ VASSERT_EQ("1.4", 53, datetimeUtils::getWeekOfYear(2003, 12, 29, false)); -+ VASSERT_EQ("1.5", 1, datetimeUtils::getWeekOfYear(2004, 1, 4)); -+ VASSERT_EQ("1.6", 2, datetimeUtils::getWeekOfYear(2004, 1, 5)); -+ VASSERT_EQ("1.7", 2, datetimeUtils::getWeekOfYear(2004, 1, 11)); - - VASSERT_EQ("2.1", 52, datetimeUtils::getWeekOfYear(2004, 12, 26)); - VASSERT_EQ("2.2", 53, datetimeUtils::getWeekOfYear(2004, 12, 27)); -diff -urN a/tests/utility/encoderTest.cpp b/tests/utility/encoderTest.cpp ---- a/tests/utility/encoderTest.cpp 2008-10-12 15:54:01.000000000 +0200 -+++ b/tests/utility/encoderTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/utility/filteredStreamTest.cpp b/tests/utility/filteredStreamTest.cpp ---- a/tests/utility/filteredStreamTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/utility/filteredStreamTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -175,6 +175,7 @@ - testFilteredOutputStreamHelper("4", "foo\nbar", "foo", "\r\nbar"); - testFilteredOutputStreamHelper("5", "foo\nbar", "foo", "\r", "\nbar"); - testFilteredOutputStreamHelper("6", "foo\nbar", "foo", "\r", "\n", "bar"); -+ testFilteredOutputStreamHelper("7", "foo\nba\nr", "foo\r", "\nba\r\nr"); - } - - // stopSequenceFilteredInputStream -diff -urN a/tests/utility/pathTest.cpp b/tests/utility/pathTest.cpp ---- a/tests/utility/pathTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/utility/pathTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/utility/smartPtrTest.cpp b/tests/utility/smartPtrTest.cpp ---- a/tests/utility/smartPtrTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/utility/smartPtrTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/utility/stringProxyTest.cpp b/tests/utility/stringProxyTest.cpp ---- a/tests/utility/stringProxyTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/utility/stringProxyTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/utility/stringUtilsTest.cpp b/tests/utility/stringUtilsTest.cpp ---- a/tests/utility/stringUtilsTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/utility/stringUtilsTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/tests/utility/urlTest.cpp b/tests/utility/urlTest.cpp ---- a/tests/utility/urlTest.cpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/tests/utility/urlTest.cpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/address.hpp b/vmime/address.hpp ---- a/vmime/address.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/address.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/addressList.hpp b/vmime/addressList.hpp ---- a/vmime/addressList.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/addressList.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/attachmentHelper.hpp b/vmime/attachmentHelper.hpp ---- a/vmime/attachmentHelper.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/attachmentHelper.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/attachment.hpp b/vmime/attachment.hpp ---- a/vmime/attachment.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/attachment.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/base.hpp b/vmime/base.hpp ---- a/vmime/base.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/base.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - - #include "vmime/config.hpp" -@@ -47,9 +48,6 @@ - - // "Null" strings - extern const string NULL_STRING; --#if VMIME_WIDE_CHAR_SUPPORT -- extern const wstring NULL_WSTRING; --#endif - - extern const text NULL_TEXT; - extern const word NULL_WORD; -diff -urN a/vmime/body.hpp b/vmime/body.hpp ---- a/vmime/body.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/body.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/bodyPartAttachment.hpp b/vmime/bodyPartAttachment.hpp ---- a/vmime/bodyPartAttachment.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/bodyPartAttachment.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/bodyPart.hpp b/vmime/bodyPart.hpp ---- a/vmime/bodyPart.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/bodyPart.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/charsetConverter.hpp b/vmime/charsetConverter.hpp ---- a/vmime/charsetConverter.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/charsetConverter.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/charset.hpp b/vmime/charset.hpp ---- a/vmime/charset.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/charset.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/component.hpp b/vmime/component.hpp ---- a/vmime/component.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/component.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/constants.hpp b/vmime/constants.hpp ---- a/vmime/constants.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/constants.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software FOUNDATION; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/contentDispositionField.hpp b/vmime/contentDispositionField.hpp ---- a/vmime/contentDispositionField.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/contentDispositionField.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/contentDisposition.hpp b/vmime/contentDisposition.hpp ---- a/vmime/contentDisposition.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/contentDisposition.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/contentHandler.hpp b/vmime/contentHandler.hpp ---- a/vmime/contentHandler.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/contentHandler.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/contentTypeField.hpp b/vmime/contentTypeField.hpp ---- a/vmime/contentTypeField.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/contentTypeField.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/dateTime.hpp b/vmime/dateTime.hpp ---- a/vmime/dateTime.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/dateTime.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/defaultAttachment.hpp b/vmime/defaultAttachment.hpp ---- a/vmime/defaultAttachment.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/defaultAttachment.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/disposition.hpp b/vmime/disposition.hpp ---- a/vmime/disposition.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/disposition.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/emptyContentHandler.hpp b/vmime/emptyContentHandler.hpp ---- a/vmime/emptyContentHandler.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/emptyContentHandler.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/encoding.hpp b/vmime/encoding.hpp ---- a/vmime/encoding.hpp 2008-10-12 15:43:38.000000000 +0200 -+++ b/vmime/encoding.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/exception.hpp b/vmime/exception.hpp ---- a/vmime/exception.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/exception.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/fileAttachment.hpp b/vmime/fileAttachment.hpp ---- a/vmime/fileAttachment.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/fileAttachment.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -41,9 +41,13 @@ - { - public: - -- fileAttachment(const string& filename, const mediaType& type); -- fileAttachment(const string& filename, const mediaType& type, const text& desc); -- fileAttachment(const string& filename, const mediaType& type, const text& desc, const encoding& enc); -+ fileAttachment(const string& filepath, const mediaType& type); -+ fileAttachment(const string& filepath, const mediaType& type, const text& desc); -+ fileAttachment(const string& filepath, const mediaType& type, const text& desc, const encoding& enc); -+ -+ fileAttachment(ref is, const word& filename, const mediaType& type); -+ fileAttachment(ref is, const word& filename, const mediaType& type, const text& desc); -+ fileAttachment(ref is, const word& filename, const mediaType& type, const text& desc, const encoding& enc); - - /** Stores information about a file attachment. - */ -@@ -65,7 +69,7 @@ - * - * @return file name - */ -- const string& getFilename() const; -+ const word& getFilename() const; - - /** Set the value of the 'filename' property. - * -@@ -73,6 +77,12 @@ - */ - void setFilename(const string& name); - -+ /** Set the value of the 'filename' property. -+ * -+ * @param name file name -+ */ -+ void setFilename(const word& name); -+ - /** Check whether the 'creation-date' property is present. - * - * @return true if the 'creation-date' property is set, -@@ -151,7 +161,7 @@ - - private: - -- string* m_filename; -+ word* m_filename; - unsigned int* m_size; - datetime* m_creationDate; - datetime* m_modifDate; -@@ -163,7 +173,8 @@ - - private: - -- void setData(const string& filename); -+ void setData(const string& filepath); -+ void setData(ref is); - - fileInfo m_fileInfo; - -diff -urN a/vmime/generatedMessageAttachment.hpp b/vmime/generatedMessageAttachment.hpp ---- a/vmime/generatedMessageAttachment.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/generatedMessageAttachment.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/headerFieldFactory.hpp b/vmime/headerFieldFactory.hpp ---- a/vmime/headerFieldFactory.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/headerFieldFactory.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/headerField.hpp b/vmime/headerField.hpp ---- a/vmime/headerField.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/headerField.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/headerFieldValue.hpp b/vmime/headerFieldValue.hpp ---- a/vmime/headerFieldValue.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/headerFieldValue.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/header.hpp b/vmime/header.hpp ---- a/vmime/header.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/header.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/htmlTextPart.hpp b/vmime/htmlTextPart.hpp ---- a/vmime/htmlTextPart.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/htmlTextPart.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mailboxField.hpp b/vmime/mailboxField.hpp ---- a/vmime/mailboxField.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/mailboxField.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mailboxGroup.hpp b/vmime/mailboxGroup.hpp ---- a/vmime/mailboxGroup.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/mailboxGroup.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mailbox.hpp b/vmime/mailbox.hpp ---- a/vmime/mailbox.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/mailbox.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mailboxList.hpp b/vmime/mailboxList.hpp ---- a/vmime/mailboxList.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/mailboxList.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mdn/MDNHelper.hpp b/vmime/mdn/MDNHelper.hpp ---- a/vmime/mdn/MDNHelper.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/mdn/MDNHelper.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mdn/MDNInfos.hpp b/vmime/mdn/MDNInfos.hpp ---- a/vmime/mdn/MDNInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/mdn/MDNInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mdn/receivedMDNInfos.hpp b/vmime/mdn/receivedMDNInfos.hpp ---- a/vmime/mdn/receivedMDNInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/mdn/receivedMDNInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mdn/sendableMDNInfos.hpp b/vmime/mdn/sendableMDNInfos.hpp ---- a/vmime/mdn/sendableMDNInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/mdn/sendableMDNInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/mediaType.hpp b/vmime/mediaType.hpp ---- a/vmime/mediaType.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/mediaType.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/messageAttachment.hpp b/vmime/messageAttachment.hpp ---- a/vmime/messageAttachment.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/messageAttachment.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/messageBuilder.hpp b/vmime/messageBuilder.hpp ---- a/vmime/messageBuilder.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/messageBuilder.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/message.hpp b/vmime/message.hpp ---- a/vmime/message.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/message.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/messageId.hpp b/vmime/messageId.hpp ---- a/vmime/messageId.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/messageId.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/messageIdSequence.hpp b/vmime/messageIdSequence.hpp ---- a/vmime/messageIdSequence.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/messageIdSequence.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/messageParser.hpp b/vmime/messageParser.hpp ---- a/vmime/messageParser.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/messageParser.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/misc/importanceHelper.hpp b/vmime/misc/importanceHelper.hpp ---- a/vmime/misc/importanceHelper.hpp 2008-10-12 11:12:23.000000000 +0200 -+++ b/vmime/misc/importanceHelper.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/connectionInfos.hpp b/vmime/net/connectionInfos.hpp ---- a/vmime/net/connectionInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/connectionInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/defaultConnectionInfos.hpp b/vmime/net/defaultConnectionInfos.hpp ---- a/vmime/net/defaultConnectionInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/defaultConnectionInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/events.hpp b/vmime/net/events.hpp ---- a/vmime/net/events.hpp 2008-10-12 11:25:06.000000000 +0200 -+++ b/vmime/net/events.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/folder.hpp b/vmime/net/folder.hpp ---- a/vmime/net/folder.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/folder.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPConnection.hpp b/vmime/net/imap/IMAPConnection.hpp ---- a/vmime/net/imap/IMAPConnection.hpp 2008-10-12 11:28:12.000000000 +0200 -+++ b/vmime/net/imap/IMAPConnection.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -96,6 +96,8 @@ - bool isSecuredConnection() const; - ref getConnectionInfos() const; - -+ ref getSocket() const; -+ - private: - - void authenticate(); -diff -urN a/vmime/net/imap/IMAPFolder.hpp b/vmime/net/imap/IMAPFolder.hpp ---- a/vmime/net/imap/IMAPFolder.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/imap/IMAPFolder.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPMessage.hpp b/vmime/net/imap/IMAPMessage.hpp ---- a/vmime/net/imap/IMAPMessage.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/imap/IMAPMessage.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPParser.hpp b/vmime/net/imap/IMAPParser.hpp ---- a/vmime/net/imap/IMAPParser.hpp 2008-10-12 15:50:19.000000000 +0200 -+++ b/vmime/net/imap/IMAPParser.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPServiceInfos.hpp b/vmime/net/imap/IMAPServiceInfos.hpp ---- a/vmime/net/imap/IMAPServiceInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/imap/IMAPServiceInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPSStore.hpp b/vmime/net/imap/IMAPSStore.hpp ---- a/vmime/net/imap/IMAPSStore.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/imap/IMAPSStore.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPStore.hpp b/vmime/net/imap/IMAPStore.hpp ---- a/vmime/net/imap/IMAPStore.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/imap/IMAPStore.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPTag.hpp b/vmime/net/imap/IMAPTag.hpp ---- a/vmime/net/imap/IMAPTag.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/imap/IMAPTag.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/imap/IMAPUtils.hpp b/vmime/net/imap/IMAPUtils.hpp ---- a/vmime/net/imap/IMAPUtils.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/imap/IMAPUtils.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/maildir/format/courierMaildirFormat.hpp b/vmime/net/maildir/format/courierMaildirFormat.hpp ---- a/vmime/net/maildir/format/courierMaildirFormat.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/format/courierMaildirFormat.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/maildir/format/kmailMaildirFormat.hpp b/vmime/net/maildir/format/kmailMaildirFormat.hpp ---- a/vmime/net/maildir/format/kmailMaildirFormat.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/format/kmailMaildirFormat.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/maildir/maildirFolder.hpp b/vmime/net/maildir/maildirFolder.hpp ---- a/vmime/net/maildir/maildirFolder.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/maildirFolder.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/maildir/maildirFormat.hpp b/vmime/net/maildir/maildirFormat.hpp ---- a/vmime/net/maildir/maildirFormat.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/maildirFormat.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -55,7 +55,7 @@ - - private: - -- ref m_store; -+ weak_ref m_store; - }; - - -diff -urN a/vmime/net/maildir/maildirMessage.hpp b/vmime/net/maildir/maildirMessage.hpp ---- a/vmime/net/maildir/maildirMessage.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/maildirMessage.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/maildir/maildirServiceInfos.hpp b/vmime/net/maildir/maildirServiceInfos.hpp ---- a/vmime/net/maildir/maildirServiceInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/maildirServiceInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/maildir/maildirStore.hpp b/vmime/net/maildir/maildirStore.hpp ---- a/vmime/net/maildir/maildirStore.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/maildirStore.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/maildir/maildirUtils.hpp b/vmime/net/maildir/maildirUtils.hpp ---- a/vmime/net/maildir/maildirUtils.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/maildir/maildirUtils.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/message.hpp b/vmime/net/message.hpp ---- a/vmime/net/message.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/message.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/pop3/POP3Folder.hpp b/vmime/net/pop3/POP3Folder.hpp ---- a/vmime/net/pop3/POP3Folder.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/pop3/POP3Folder.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/pop3/POP3Message.hpp b/vmime/net/pop3/POP3Message.hpp ---- a/vmime/net/pop3/POP3Message.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/pop3/POP3Message.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/pop3/POP3ServiceInfos.hpp b/vmime/net/pop3/POP3ServiceInfos.hpp ---- a/vmime/net/pop3/POP3ServiceInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/pop3/POP3ServiceInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/pop3/POP3SStore.hpp b/vmime/net/pop3/POP3SStore.hpp ---- a/vmime/net/pop3/POP3SStore.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/pop3/POP3SStore.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/pop3/POP3Store.hpp b/vmime/net/pop3/POP3Store.hpp ---- a/vmime/net/pop3/POP3Store.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/pop3/POP3Store.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/pop3/POP3Utils.hpp b/vmime/net/pop3/POP3Utils.hpp ---- a/vmime/net/pop3/POP3Utils.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/pop3/POP3Utils.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/securedConnectionInfos.hpp b/vmime/net/securedConnectionInfos.hpp ---- a/vmime/net/securedConnectionInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/securedConnectionInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/sendmail/sendmailServiceInfos.hpp b/vmime/net/sendmail/sendmailServiceInfos.hpp ---- a/vmime/net/sendmail/sendmailServiceInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/sendmail/sendmailServiceInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/sendmail/sendmailTransport.hpp b/vmime/net/sendmail/sendmailTransport.hpp ---- a/vmime/net/sendmail/sendmailTransport.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/sendmail/sendmailTransport.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/serviceFactory.hpp b/vmime/net/serviceFactory.hpp ---- a/vmime/net/serviceFactory.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/serviceFactory.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/service.hpp b/vmime/net/service.hpp ---- a/vmime/net/service.hpp 2008-10-12 10:58:53.000000000 +0200 -+++ b/vmime/net/service.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/serviceInfos.hpp b/vmime/net/serviceInfos.hpp ---- a/vmime/net/serviceInfos.hpp 2008-10-12 10:58:26.000000000 +0200 -+++ b/vmime/net/serviceInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/session.hpp b/vmime/net/session.hpp ---- a/vmime/net/session.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/session.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/smtp/SMTPResponse.hpp b/vmime/net/smtp/SMTPResponse.hpp ---- a/vmime/net/smtp/SMTPResponse.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/smtp/SMTPResponse.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/smtp/SMTPServiceInfos.hpp b/vmime/net/smtp/SMTPServiceInfos.hpp ---- a/vmime/net/smtp/SMTPServiceInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/smtp/SMTPServiceInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/smtp/SMTPSTransport.hpp b/vmime/net/smtp/SMTPSTransport.hpp ---- a/vmime/net/smtp/SMTPSTransport.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/smtp/SMTPSTransport.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/smtp/SMTPTransport.hpp b/vmime/net/smtp/SMTPTransport.hpp ---- a/vmime/net/smtp/SMTPTransport.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/smtp/SMTPTransport.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/socket.hpp b/vmime/net/socket.hpp ---- a/vmime/net/socket.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/socket.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -41,6 +41,11 @@ - - virtual ~socket() { } - -+ /** Type used for lengths in streams. -+ */ -+ typedef int size_type; -+ -+ - /** Connect to the specified address and port. - * - * @param address server address (this can be a full qualified domain name -@@ -71,7 +76,7 @@ - * @param count maximum number of bytes to receive (size of buffer) - * @return number of bytes received/written into output buffer - */ -- virtual int receiveRaw(char* buffer, const int count) = 0; -+ virtual int receiveRaw(char* buffer, const size_type count) = 0; - - /** Send (text) data to the socket. - * -@@ -84,7 +89,14 @@ - * @param buffer data to send - * @param count number of bytes to send (size of buffer) - */ -- virtual void sendRaw(const char* buffer, const int count) = 0; -+ virtual void sendRaw(const char* buffer, const size_type count) = 0; -+ -+ /** Return the preferred maximum block size when reading -+ * from or writing to this stream. -+ * -+ * @return block size, in bytes -+ */ -+ virtual size_type getBlockSize() const = 0; - - protected: - -diff -urN a/vmime/net/store.hpp b/vmime/net/store.hpp ---- a/vmime/net/store.hpp 2008-10-12 11:29:46.000000000 +0200 -+++ b/vmime/net/store.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/timeoutHandler.hpp b/vmime/net/timeoutHandler.hpp ---- a/vmime/net/timeoutHandler.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/timeoutHandler.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/tls/TLSSecuredConnectionInfos.hpp b/vmime/net/tls/TLSSecuredConnectionInfos.hpp ---- a/vmime/net/tls/TLSSecuredConnectionInfos.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/tls/TLSSecuredConnectionInfos.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/tls/TLSSession.hpp b/vmime/net/tls/TLSSession.hpp ---- a/vmime/net/tls/TLSSession.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/tls/TLSSession.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/net/tls/TLSSocket.hpp b/vmime/net/tls/TLSSocket.hpp ---- a/vmime/net/tls/TLSSocket.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/net/tls/TLSSocket.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -84,10 +84,12 @@ - bool isConnected() const; - - void receive(string& buffer); -- int receiveRaw(char* buffer, const int count); -+ size_type receiveRaw(char* buffer, const size_type count); - - void send(const string& buffer); -- void sendRaw(const char* buffer, const int count); -+ void sendRaw(const char* buffer, const size_type count); -+ -+ size_type getBlockSize() const; - - private: - -diff -urN a/vmime/net/transport.hpp b/vmime/net/transport.hpp ---- a/vmime/net/transport.hpp 2008-10-12 11:29:56.000000000 +0200 -+++ b/vmime/net/transport.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/object.hpp b/vmime/object.hpp ---- a/vmime/object.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/object.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/options.hpp b/vmime/options.hpp ---- a/vmime/options.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/options.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/parameter.hpp b/vmime/parameter.hpp ---- a/vmime/parameter.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/parameter.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/parameterizedHeaderField.hpp b/vmime/parameterizedHeaderField.hpp ---- a/vmime/parameterizedHeaderField.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/parameterizedHeaderField.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/parsedMessageAttachment.hpp b/vmime/parsedMessageAttachment.hpp ---- a/vmime/parsedMessageAttachment.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/parsedMessageAttachment.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/parserHelpers.hpp b/vmime/parserHelpers.hpp ---- a/vmime/parserHelpers.hpp 2008-10-12 10:57:27.000000000 +0200 -+++ b/vmime/parserHelpers.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/path.hpp b/vmime/path.hpp ---- a/vmime/path.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/path.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/plainTextPart.hpp b/vmime/plainTextPart.hpp ---- a/vmime/plainTextPart.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/plainTextPart.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/platform.hpp b/vmime/platform.hpp ---- a/vmime/platform.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/platform.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -108,7 +108,7 @@ - * - * @return socket factory - */ -- virtual ref getSocketFactory() const = 0; -+ virtual ref getSocketFactory() = 0; - #endif - - #if VMIME_HAVE_FILESYSTEM_FEATURES -@@ -116,14 +116,14 @@ - * - * @return file-system factory - */ -- virtual utility::fileSystemFactory* getFileSystemFactory() const = 0; -+ virtual ref getFileSystemFactory() = 0; - - /** Return a pointer to a factory that creates child process objects, - * which are used to spawn processes (run executable files). - * - * @return child process factory - */ -- virtual utility::childProcessFactory* getChildProcessFactory() const = 0; -+ virtual ref getChildProcessFactory() = 0; - #endif - - }; -@@ -135,7 +135,7 @@ - sm_handler = vmime::create (); - } - -- static ref getHandler() -+ static ref getHandler() - { - if (!sm_handler) - throw exceptions::no_platform_handler(); -diff -urN a/vmime/platforms/posix/posixChildProcess.hpp b/vmime/platforms/posix/posixChildProcess.hpp ---- a/vmime/platforms/posix/posixChildProcess.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/platforms/posix/posixChildProcess.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/platforms/posix/posixFile.hpp b/vmime/platforms/posix/posixFile.hpp ---- a/vmime/platforms/posix/posixFile.hpp 2008-10-12 11:41:34.000000000 +0200 -+++ b/vmime/platforms/posix/posixFile.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/platforms/posix/posixHandler.hpp b/vmime/platforms/posix/posixHandler.hpp ---- a/vmime/platforms/posix/posixHandler.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/platforms/posix/posixHandler.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -61,13 +61,13 @@ - unsigned int getProcessId() const; - - #if VMIME_HAVE_MESSAGING_FEATURES -- ref getSocketFactory() const; -+ ref getSocketFactory(); - #endif - - #if VMIME_HAVE_FILESYSTEM_FEATURES -- vmime::utility::fileSystemFactory* getFileSystemFactory() const; -+ ref getFileSystemFactory(); - -- vmime::utility::childProcessFactory* getChildProcessFactory() const; -+ ref getChildProcessFactory(); - #endif - - void wait() const; -@@ -79,8 +79,8 @@ - #endif - - #if VMIME_HAVE_FILESYSTEM_FEATURES -- posixFileSystemFactory* m_fileSysFactory; -- posixChildProcessFactory* m_childProcFactory; -+ ref m_fileSysFactory; -+ ref m_childProcFactory; - #endif - }; - -diff -urN a/vmime/platforms/posix/posixSocket.hpp b/vmime/platforms/posix/posixSocket.hpp ---- a/vmime/platforms/posix/posixSocket.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/platforms/posix/posixSocket.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -48,10 +48,12 @@ - void disconnect(); - - void receive(vmime::string& buffer); -- int receiveRaw(char* buffer, const int count); -+ size_type receiveRaw(char* buffer, const size_type count); - - void send(const vmime::string& buffer); -- void sendRaw(const char* buffer, const int count); -+ void sendRaw(const char* buffer, const size_type count); -+ -+ size_type getBlockSize() const; - - protected: - -diff -urN a/vmime/platforms/windows/windowsFile.hpp b/vmime/platforms/windows/windowsFile.hpp ---- a/vmime/platforms/windows/windowsFile.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/platforms/windows/windowsFile.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://vmime.sourceforge.net) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -73,7 +73,7 @@ - bool canRead() const; - bool canWrite() const; - -- const length_type getLength(); -+ length_type getLength(); - - const path& getFullPath() const; - -diff -urN a/vmime/platforms/windows/windowsHandler.hpp b/vmime/platforms/windows/windowsHandler.hpp ---- a/vmime/platforms/windows/windowsHandler.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/platforms/windows/windowsHandler.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://vmime.sourceforge.net) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -60,13 +60,13 @@ - unsigned int getProcessId() const; - - #if VMIME_HAVE_MESSAGING_FEATURES -- ref getSocketFactory() const; -+ ref getSocketFactory(); - #endif - - #if VMIME_HAVE_FILESYSTEM_FEATURES -- vmime::utility::fileSystemFactory* getFileSystemFactory() const; -+ ref getFileSystemFactory(); - -- vmime::utility::childProcessFactory* getChildProcessFactory() const; -+ ref getChildProcessFactory(); - #endif - - void wait() const; -@@ -78,7 +78,7 @@ - #endif - - #if VMIME_HAVE_FILESYSTEM_FEATURES -- windowsFileSystemFactory* m_fileSysFactory; -+ ref m_fileSysFactory; - #endif - }; - -diff -urN a/vmime/platforms/windows/windowsSocket.hpp b/vmime/platforms/windows/windowsSocket.hpp ---- a/vmime/platforms/windows/windowsSocket.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/platforms/windows/windowsSocket.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://vmime.sourceforge.net) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -50,10 +50,12 @@ - void disconnect(); - - void receive(vmime::string& buffer); -- int receiveRaw(char* buffer, const int count); -+ size_type receiveRaw(char* buffer, const size_type count); - - void send(const vmime::string& buffer); -- void sendRaw(const char* buffer, const int count); -+ void sendRaw(const char* buffer, const size_type count); -+ -+ size_type getBlockSize() const; - - private: - -diff -urN a/vmime/propertySet.hpp b/vmime/propertySet.hpp ---- a/vmime/propertySet.hpp 2008-10-12 10:58:07.000000000 +0200 -+++ b/vmime/propertySet.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -432,7 +432,7 @@ - - #ifndef VMIME_INLINE_TEMPLATE_SPECIALIZATION - --template <> void propertySet::property::setValue(const string& value); -+template <> void propertySet::property::setValue (const string& value); - template <> void propertySet::property::setValue(const bool& value); - - template <> string propertySet::property::getValue() const; -diff -urN a/vmime/relay.hpp b/vmime/relay.hpp ---- a/vmime/relay.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/relay.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/authenticator.hpp b/vmime/security/authenticator.hpp ---- a/vmime/security/authenticator.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/authenticator.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/cert/certificateChain.hpp b/vmime/security/cert/certificateChain.hpp ---- a/vmime/security/cert/certificateChain.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/cert/certificateChain.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/cert/certificate.hpp b/vmime/security/cert/certificate.hpp ---- a/vmime/security/cert/certificate.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/cert/certificate.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/cert/certificateVerifier.hpp b/vmime/security/cert/certificateVerifier.hpp ---- a/vmime/security/cert/certificateVerifier.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/cert/certificateVerifier.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/cert/defaultCertificateVerifier.hpp b/vmime/security/cert/defaultCertificateVerifier.hpp ---- a/vmime/security/cert/defaultCertificateVerifier.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/cert/defaultCertificateVerifier.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/cert/X509Certificate.hpp b/vmime/security/cert/X509Certificate.hpp ---- a/vmime/security/cert/X509Certificate.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/cert/X509Certificate.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/defaultAuthenticator.hpp b/vmime/security/defaultAuthenticator.hpp ---- a/vmime/security/defaultAuthenticator.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/defaultAuthenticator.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/digest/md5/md5MessageDigest.hpp b/vmime/security/digest/md5/md5MessageDigest.hpp ---- a/vmime/security/digest/md5/md5MessageDigest.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/digest/md5/md5MessageDigest.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/digest/messageDigestFactory.hpp b/vmime/security/digest/messageDigestFactory.hpp ---- a/vmime/security/digest/messageDigestFactory.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/digest/messageDigestFactory.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/digest/messageDigest.hpp b/vmime/security/digest/messageDigest.hpp ---- a/vmime/security/digest/messageDigest.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/digest/messageDigest.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/digest/sha1/sha1MessageDigest.hpp b/vmime/security/digest/sha1/sha1MessageDigest.hpp ---- a/vmime/security/digest/sha1/sha1MessageDigest.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/digest/sha1/sha1MessageDigest.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/builtinSASLMechanism.hpp b/vmime/security/sasl/builtinSASLMechanism.hpp ---- a/vmime/security/sasl/builtinSASLMechanism.hpp 2008-10-12 11:37:42.000000000 +0200 -+++ b/vmime/security/sasl/builtinSASLMechanism.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/defaultSASLAuthenticator.hpp b/vmime/security/sasl/defaultSASLAuthenticator.hpp ---- a/vmime/security/sasl/defaultSASLAuthenticator.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/sasl/defaultSASLAuthenticator.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/SASLAuthenticator.hpp b/vmime/security/sasl/SASLAuthenticator.hpp ---- a/vmime/security/sasl/SASLAuthenticator.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/sasl/SASLAuthenticator.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/SASLContext.hpp b/vmime/security/sasl/SASLContext.hpp ---- a/vmime/security/sasl/SASLContext.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/sasl/SASLContext.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/SASLMechanismFactory.hpp b/vmime/security/sasl/SASLMechanismFactory.hpp ---- a/vmime/security/sasl/SASLMechanismFactory.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/sasl/SASLMechanismFactory.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/SASLMechanism.hpp b/vmime/security/sasl/SASLMechanism.hpp ---- a/vmime/security/sasl/SASLMechanism.hpp 2008-10-12 11:31:17.000000000 +0200 -+++ b/vmime/security/sasl/SASLMechanism.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/SASLSession.hpp b/vmime/security/sasl/SASLSession.hpp ---- a/vmime/security/sasl/SASLSession.hpp 2008-10-12 11:31:38.000000000 +0200 -+++ b/vmime/security/sasl/SASLSession.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/security/sasl/SASLSocket.hpp b/vmime/security/sasl/SASLSocket.hpp ---- a/vmime/security/sasl/SASLSocket.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/security/sasl/SASLSocket.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -53,10 +53,12 @@ - bool isConnected() const; - - void receive(string& buffer); -- int receiveRaw(char* buffer, const int count); -+ size_type receiveRaw(char* buffer, const size_type count); - - void send(const string& buffer); -- void sendRaw(const char* buffer, const int count); -+ void sendRaw(const char* buffer, const size_type count); -+ -+ size_type getBlockSize() const; - - private: - -diff -urN a/vmime/streamContentHandler.hpp b/vmime/streamContentHandler.hpp ---- a/vmime/streamContentHandler.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/streamContentHandler.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/stringContentHandler.hpp b/vmime/stringContentHandler.hpp ---- a/vmime/stringContentHandler.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/stringContentHandler.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/text.hpp b/vmime/text.hpp ---- a/vmime/text.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/text.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -129,10 +129,6 @@ - */ - const std::vector > getWordList(); - -- // Decoding --#if VMIME_WIDE_CHAR_SUPPORT -- const wstring getDecodedText() const; --#endif - - /** Return the text converted into the specified charset. - * The encoded-words are decoded and then converted in the -@@ -197,7 +193,8 @@ - - FORCE_NO_ENCODING = (1 << 0), /**< Just fold lines, don't encode them. */ - FORCE_ENCODING = (1 << 1), /**< Encode lines even if they are plain ASCII text. */ -- NO_NEW_LINE_SEQUENCE = (1 << 2) /**< Use CRLF instead of new-line sequence (CRLF + TAB). */ -+ NO_NEW_LINE_SEQUENCE = (1 << 2), /**< Use CRLF instead of new-line sequence (CRLF + TAB). */ -+ QUOTE_IF_POSSIBLE = (1 << 3) /**< Use quoting instead of encoding when possible (even if FORCE_ENCODING is specified). */ - }; - - /** Encode and fold text in respect to RFC-2047. -diff -urN a/vmime/textPartFactory.hpp b/vmime/textPartFactory.hpp ---- a/vmime/textPartFactory.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/textPartFactory.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/textPart.hpp b/vmime/textPart.hpp ---- a/vmime/textPart.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/textPart.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/types.hpp b/vmime/types.hpp ---- a/vmime/types.hpp 2008-10-12 10:54:34.000000000 +0200 -+++ b/vmime/types.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -36,9 +36,6 @@ - namespace vmime - { - typedef std::string string; --#if VMIME_WIDE_CHAR_SUPPORT -- typedef std::wstring wstring; --#endif - - typedef unsigned short port_t; - -diff -urN a/vmime/utility/childProcess.hpp b/vmime/utility/childProcess.hpp ---- a/vmime/utility/childProcess.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/childProcess.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -85,7 +85,7 @@ - /** Create 'childProcess' objects. - */ - --class childProcessFactory -+class childProcessFactory : public object - { - public: - -diff -urN a/vmime/utility/datetimeUtils.hpp b/vmime/utility/datetimeUtils.hpp ---- a/vmime/utility/datetimeUtils.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/datetimeUtils.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -84,9 +84,11 @@ - * @param year year in 4-digit format - * @param month month (1-12), January is 1, December is 12 (see datetime::Months enum) - * @param day month day (1-31) -+ * @param iso if TRUE, use ISO week-numbering year (default is to use calendar year). -+ * For more information, read here: http://en.wikipedia.org/wiki/ISO_8601#Week_dates - * @return the week number (1 is the first week of the year) - */ -- static int getWeekOfYear(const int year, const int month, const int day); -+ static int getWeekOfYear(const int year, const int month, const int day, const bool iso = false); - }; - - -diff -urN a/vmime/utility/encoder/b64Encoder.hpp b/vmime/utility/encoder/b64Encoder.hpp ---- a/vmime/utility/encoder/b64Encoder.hpp 2008-10-12 15:39:13.000000000 +0200 -+++ b/vmime/utility/encoder/b64Encoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/binaryEncoder.hpp b/vmime/utility/encoder/binaryEncoder.hpp ---- a/vmime/utility/encoder/binaryEncoder.hpp 2008-10-12 15:27:36.000000000 +0200 -+++ b/vmime/utility/encoder/binaryEncoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/defaultEncoder.hpp b/vmime/utility/encoder/defaultEncoder.hpp ---- a/vmime/utility/encoder/defaultEncoder.hpp 2008-10-12 15:48:42.000000000 +0200 -+++ b/vmime/utility/encoder/defaultEncoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/eightBitEncoder.hpp b/vmime/utility/encoder/eightBitEncoder.hpp ---- a/vmime/utility/encoder/eightBitEncoder.hpp 2008-10-12 15:22:29.000000000 +0200 -+++ b/vmime/utility/encoder/eightBitEncoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/encoderFactory.hpp b/vmime/utility/encoder/encoderFactory.hpp ---- a/vmime/utility/encoder/encoderFactory.hpp 2008-10-12 15:11:07.000000000 +0200 -+++ b/vmime/utility/encoder/encoderFactory.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/encoder.hpp b/vmime/utility/encoder/encoder.hpp ---- a/vmime/utility/encoder/encoder.hpp 2008-10-12 15:12:28.000000000 +0200 -+++ b/vmime/utility/encoder/encoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/qpEncoder.hpp b/vmime/utility/encoder/qpEncoder.hpp ---- a/vmime/utility/encoder/qpEncoder.hpp 2008-10-12 15:32:02.000000000 +0200 -+++ b/vmime/utility/encoder/qpEncoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/sevenBitEncoder.hpp b/vmime/utility/encoder/sevenBitEncoder.hpp ---- a/vmime/utility/encoder/sevenBitEncoder.hpp 2008-10-12 15:22:12.000000000 +0200 -+++ b/vmime/utility/encoder/sevenBitEncoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/encoder/uuEncoder.hpp b/vmime/utility/encoder/uuEncoder.hpp ---- a/vmime/utility/encoder/uuEncoder.hpp 2008-10-12 15:36:17.000000000 +0200 -+++ b/vmime/utility/encoder/uuEncoder.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/file.hpp b/vmime/utility/file.hpp ---- a/vmime/utility/file.hpp 2008-10-12 11:00:26.000000000 +0200 -+++ b/vmime/utility/file.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -214,7 +214,7 @@ - /** Constructs 'file' objects. - */ - --class fileSystemFactory -+class fileSystemFactory : public object - { - public: - -diff -urN a/vmime/utility/filteredStream.hpp b/vmime/utility/filteredStream.hpp ---- a/vmime/utility/filteredStream.hpp 2008-10-12 10:59:33.000000000 +0200 -+++ b/vmime/utility/filteredStream.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -41,6 +41,8 @@ - { - public: - -+ virtual size_type getBlockSize(); -+ - /** Return a reference to the stream being filtered. - * - * @return stream being filtered -@@ -56,6 +58,8 @@ - { - public: - -+ virtual size_type getBlockSize(); -+ - /** Return a reference to the stream being filtered. - * - * @return destination stream for filtered data -diff -urN a/vmime/utility/path.hpp b/vmime/utility/path.hpp ---- a/vmime/utility/path.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/path.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/progressListener.hpp b/vmime/utility/progressListener.hpp ---- a/vmime/utility/progressListener.hpp 2008-10-12 10:54:32.000000000 +0200 -+++ b/vmime/utility/progressListener.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/random.hpp b/vmime/utility/random.hpp ---- a/vmime/utility/random.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/random.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/smartPtr.hpp b/vmime/utility/smartPtr.hpp ---- a/vmime/utility/smartPtr.hpp 2008-10-12 10:55:33.000000000 +0200 -+++ b/vmime/utility/smartPtr.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/smartPtrInt.hpp b/vmime/utility/smartPtrInt.hpp ---- a/vmime/utility/smartPtrInt.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/smartPtrInt.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/stream.hpp b/vmime/utility/stream.hpp ---- a/vmime/utility/stream.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/stream.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -77,7 +77,7 @@ - * - * @return block size, in bytes - */ -- virtual size_type getBlockSize() const; -+ virtual size_type getBlockSize(); - }; - - -@@ -239,6 +239,7 @@ - void write(const value_type* const data, const size_type count); - void flush(); - -+size_type getBlockSize(){return 8192;} - private: - - string& m_buffer; -@@ -402,7 +403,7 @@ - void write(const value_type* const data, const size_type count); - void flush(); - -- size_type getBlockSize() const; -+ size_type getBlockSize(); - - private: - -@@ -426,7 +427,7 @@ - size_type read(value_type* const data, const size_type count); - size_type skip(const size_type count); - -- size_type getBlockSize() const; -+ size_type getBlockSize(); - - private: - -diff -urN a/vmime/utility/stringProxy.hpp b/vmime/utility/stringProxy.hpp ---- a/vmime/utility/stringProxy.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/stringProxy.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/stringUtils.hpp b/vmime/utility/stringUtils.hpp ---- a/vmime/utility/stringUtils.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/stringUtils.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/url.hpp b/vmime/utility/url.hpp ---- a/vmime/utility/url.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/url.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/utility/urlUtils.hpp b/vmime/utility/urlUtils.hpp ---- a/vmime/utility/urlUtils.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/utility/urlUtils.hpp 2010-02-09 14:34:53.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/vmime.hpp b/vmime/vmime.hpp ---- a/vmime/vmime.hpp 2008-10-12 15:14:17.000000000 +0200 -+++ b/vmime/vmime.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/wordEncoder.hpp b/vmime/wordEncoder.hpp ---- a/vmime/wordEncoder.hpp 2008-10-12 15:46:34.000000000 +0200 -+++ b/vmime/wordEncoder.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -diff -urN a/vmime/word.hpp b/vmime/word.hpp ---- a/vmime/word.hpp 2008-10-12 10:54:33.000000000 +0200 -+++ b/vmime/word.hpp 2010-02-09 14:34:54.000000000 +0100 -@@ -1,10 +1,10 @@ - // - // VMime library (http://www.vmime.org) --// Copyright (C) 2002-2008 Vincent Richard -+// Copyright (C) 2002-2009 Vincent Richard - // - // 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 -+// published by the Free Software Foundation; either version 3 of - // the License, or (at your option) any later version. - // - // This program is distributed in the hope that it will be useful, -@@ -60,6 +60,12 @@ - */ - string& getBuffer(); - -+ /** Tests whether this word is empty. -+ * -+ * @return true if the buffer is empty, false otherwise -+ */ -+ bool isEmpty() const; -+ - /** Set the raw data for this encoded word. - * - * @param buffer raw data buffer -@@ -85,10 +91,6 @@ - bool operator==(const word& w) const; - bool operator!=(const word& w) const; - --#if VMIME_WIDE_CHAR_SUPPORT -- const wstring getDecodedText() const; --#endif -- - /** Return the contained text converted to the specified charset. - * - * @param dest output charset -diff -urN a/vmime.vcproj b/vmime.vcproj ---- a/vmime.vcproj 2008-10-19 14:36:21.000000000 +0200 -+++ b/vmime.vcproj 2010-02-10 11:06:52.000000000 +0100 -@@ -287,6 +287,7 @@ - - - -+ - - - -@@ -463,7 +464,6 @@ - - - -- - - - diff --git a/src/vmime-0.9.1-svn-r533-20100215.patch b/src/vmime-0.9.1-svn-r533-20100215.patch deleted file mode 100644 index 473f0e3..0000000 --- a/src/vmime-0.9.1-svn-r533-20100215.patch +++ /dev/null @@ -1,640 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN b/m4/lib-link.m4 c/m4/lib-link.m4 ---- b/m4/lib-link.m4 2008-01-05 18:49:17.000000000 +0100 -+++ c/m4/lib-link.m4 2010-02-15 10:38:53.572219098 +0100 -@@ -1,17 +1,19 @@ --# lib-link.m4 serial 6 (gettext-0.14.3) --dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. -+# lib-link.m4 serial 13 (gettext-0.17) -+dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, - dnl with or without modifications, as long as this notice is preserved. - - dnl From Bruno Haible. - --AC_PREREQ(2.50) -+AC_PREREQ(2.54) - - dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and - dnl the libraries corresponding to explicit and implicit dependencies. - dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and - dnl augments the CPPFLAGS variable. -+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname -+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. - AC_DEFUN([AC_LIB_LINKFLAGS], - [ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) -@@ -24,13 +26,16 @@ - ac_cv_lib[]Name[]_libs="$LIB[]NAME" - ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" - ac_cv_lib[]Name[]_cppflags="$INC[]NAME" -+ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" - ]) - LIB[]NAME="$ac_cv_lib[]Name[]_libs" - LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" - INC[]NAME="$ac_cv_lib[]Name[]_cppflags" -+ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" - AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) -+ AC_SUBST([LIB]NAME[_PREFIX]) - dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the - dnl results of this search when this library appears as a dependency. - HAVE_LIB[]NAME=yes -@@ -46,6 +51,8 @@ - dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and - dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs - dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. -+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname -+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. - AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], - [ - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) -@@ -82,17 +89,23 @@ - CPPFLAGS="$ac_save_CPPFLAGS" - LIB[]NAME= - LTLIB[]NAME= -+ LIB[]NAME[]_PREFIX= - fi - AC_SUBST([HAVE_LIB]NAME) - AC_SUBST([LIB]NAME) - AC_SUBST([LTLIB]NAME) -+ AC_SUBST([LIB]NAME[_PREFIX]) - undefine([Name]) - undefine([NAME]) - ]) - - dnl Determine the platform dependent parameters needed to use rpath: --dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, --dnl hardcode_direct, hardcode_minus_L. -+dnl acl_libext, -+dnl acl_shlibext, -+dnl acl_hardcode_libdir_flag_spec, -+dnl acl_hardcode_libdir_separator, -+dnl acl_hardcode_direct, -+dnl acl_hardcode_minus_L. - AC_DEFUN([AC_LIB_RPATH], - [ - dnl Tell automake >= 1.10 to complain if config.rpath is missing. -@@ -109,12 +122,14 @@ - acl_cv_rpath=done - ]) - wl="$acl_cv_wl" -- libext="$acl_cv_libext" -- shlibext="$acl_cv_shlibext" -- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" -- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" -- hardcode_direct="$acl_cv_hardcode_direct" -- hardcode_minus_L="$acl_cv_hardcode_minus_L" -+ acl_libext="$acl_cv_libext" -+ acl_shlibext="$acl_cv_shlibext" -+ acl_libname_spec="$acl_cv_libname_spec" -+ acl_library_names_spec="$acl_cv_library_names_spec" -+ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" -+ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" -+ acl_hardcode_direct="$acl_cv_hardcode_direct" -+ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" - dnl Determine whether the user wants rpath handling at all. - AC_ARG_ENABLE(rpath, - [ --disable-rpath do not hardcode runtime library paths], -@@ -124,19 +139,24 @@ - dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and - dnl the libraries corresponding to explicit and implicit dependencies. - dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. -+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found -+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. - AC_DEFUN([AC_LIB_LINKFLAGS_BODY], - [ -+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], - [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) -+ dnl Autoconf >= 2.61 supports dots in --with options. -+ define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])]) - dnl By default, look in $includedir and $libdir. - use_additional=yes - AC_LIB_WITH_FINAL_PREFIX([ - eval additional_includedir=\"$includedir\" - eval additional_libdir=\"$libdir\" - ]) -- AC_LIB_ARG_WITH([lib$1-prefix], --[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib -- --without-lib$1-prefix don't search for lib$1 in includedir and libdir], -+ AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix], -+[ --with-lib]N_A_M_E[-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib -+ --without-lib]N_A_M_E[-prefix don't search for lib$1 in includedir and libdir], - [ - if test "X$withval" = "Xno"; then - use_additional=no -@@ -148,7 +168,7 @@ - ]) - else - additional_includedir="$withval/include" -- additional_libdir="$withval/lib" -+ additional_libdir="$withval/$acl_libdirstem" - fi - fi - ]) -@@ -157,6 +177,7 @@ - LIB[]NAME= - LTLIB[]NAME= - INC[]NAME= -+ LIB[]NAME[]_PREFIX= - rpathdirs= - ltrpathdirs= - names_already_handled= -@@ -196,22 +217,55 @@ - found_la= - found_so= - found_a= -+ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name -+ if test -n "$acl_shlibext"; then -+ shrext=".$acl_shlibext" # typically: shrext=.so -+ else -+ shrext= -+ fi - if test $use_additional = yes; then -- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then -- found_dir="$additional_libdir" -- found_so="$additional_libdir/lib$name.$shlibext" -- if test -f "$additional_libdir/lib$name.la"; then -- found_la="$additional_libdir/lib$name.la" -- fi -- else -- if test -f "$additional_libdir/lib$name.$libext"; then -- found_dir="$additional_libdir" -- found_a="$additional_libdir/lib$name.$libext" -- if test -f "$additional_libdir/lib$name.la"; then -- found_la="$additional_libdir/lib$name.la" -+ dir="$additional_libdir" -+ dnl The same code as in the loop below: -+ dnl First look for a shared library. -+ if test -n "$acl_shlibext"; then -+ if test -f "$dir/$libname$shrext"; then -+ found_dir="$dir" -+ found_so="$dir/$libname$shrext" -+ else -+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then -+ ver=`(cd "$dir" && \ -+ for f in "$libname$shrext".*; do echo "$f"; done \ -+ | sed -e "s,^$libname$shrext\\\\.,," \ -+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ -+ | sed 1q ) 2>/dev/null` -+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then -+ found_dir="$dir" -+ found_so="$dir/$libname$shrext.$ver" -+ fi -+ else -+ eval library_names=\"$acl_library_names_spec\" -+ for f in $library_names; do -+ if test -f "$dir/$f"; then -+ found_dir="$dir" -+ found_so="$dir/$f" -+ break -+ fi -+ done - fi - fi - fi -+ dnl Then look for a static library. -+ if test "X$found_dir" = "X"; then -+ if test -f "$dir/$libname.$acl_libext"; then -+ found_dir="$dir" -+ found_a="$dir/$libname.$acl_libext" -+ fi -+ fi -+ if test "X$found_dir" != "X"; then -+ if test -f "$dir/$libname.la"; then -+ found_la="$dir/$libname.la" -+ fi -+ fi - fi - if test "X$found_dir" = "X"; then - for x in $LDFLAGS $LTLIB[]NAME; do -@@ -219,21 +273,46 @@ - case "$x" in - -L*) - dir=`echo "X$x" | sed -e 's/^X-L//'` -- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then -- found_dir="$dir" -- found_so="$dir/lib$name.$shlibext" -- if test -f "$dir/lib$name.la"; then -- found_la="$dir/lib$name.la" -- fi -- else -- if test -f "$dir/lib$name.$libext"; then -+ dnl First look for a shared library. -+ if test -n "$acl_shlibext"; then -+ if test -f "$dir/$libname$shrext"; then - found_dir="$dir" -- found_a="$dir/lib$name.$libext" -- if test -f "$dir/lib$name.la"; then -- found_la="$dir/lib$name.la" -+ found_so="$dir/$libname$shrext" -+ else -+ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then -+ ver=`(cd "$dir" && \ -+ for f in "$libname$shrext".*; do echo "$f"; done \ -+ | sed -e "s,^$libname$shrext\\\\.,," \ -+ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ -+ | sed 1q ) 2>/dev/null` -+ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then -+ found_dir="$dir" -+ found_so="$dir/$libname$shrext.$ver" -+ fi -+ else -+ eval library_names=\"$acl_library_names_spec\" -+ for f in $library_names; do -+ if test -f "$dir/$f"; then -+ found_dir="$dir" -+ found_so="$dir/$f" -+ break -+ fi -+ done - fi - fi - fi -+ dnl Then look for a static library. -+ if test "X$found_dir" = "X"; then -+ if test -f "$dir/$libname.$acl_libext"; then -+ found_dir="$dir" -+ found_a="$dir/$libname.$acl_libext" -+ fi -+ fi -+ if test "X$found_dir" != "X"; then -+ if test -f "$dir/$libname.la"; then -+ found_la="$dir/$libname.la" -+ fi -+ fi - ;; - esac - if test "X$found_dir" != "X"; then -@@ -248,7 +327,7 @@ - dnl Linking with a shared library. We attempt to hardcode its - dnl directory into the executable's runpath, unless it's the - dnl standard /usr/lib. -- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then -+ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then - dnl No hardcoding is needed. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else -@@ -267,12 +346,12 @@ - ltrpathdirs="$ltrpathdirs $found_dir" - fi - dnl The hardcoding into $LIBNAME is system dependent. -- if test "$hardcode_direct" = yes; then -+ if test "$acl_hardcode_direct" = yes; then - dnl Using DIR/libNAME.so during linking hardcodes DIR into the - dnl resulting binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else -- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then -+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then - dnl Use an explicit option to hardcode DIR into the resulting - dnl binary. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" -@@ -303,13 +382,13 @@ - if test -z "$haveit"; then - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" - fi -- if test "$hardcode_minus_L" != no; then -+ if test "$acl_hardcode_minus_L" != no; then - dnl FIXME: Not sure whether we should use - dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" - dnl here. - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" - else -- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH -+ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH - dnl here, because this doesn't fit in flags passed to the - dnl compiler. So give up. No hardcoding. This affects only - dnl very old systems. -@@ -334,8 +413,9 @@ - dnl Assume the include files are nearby. - additional_includedir= - case "$found_dir" in -- */lib | */lib/) -- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` -+ */$acl_libdirstem | */$acl_libdirstem/) -+ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` -+ LIB[]NAME[]_PREFIX="$basedir" - additional_includedir="$basedir/include" - ;; - esac -@@ -396,9 +476,9 @@ - dnl 3. if it's already present in $LDFLAGS or the already - dnl constructed $LIBNAME, - dnl 4. if it doesn't exist as a directory. -- if test "X$additional_libdir" != "X/usr/lib"; then -+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= -- if test "X$additional_libdir" = "X/usr/local/lib"; then -+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux* | gnu* | k*bsd*-gnu) haveit=yes;; -@@ -497,18 +577,18 @@ - done - done - if test "X$rpathdirs" != "X"; then -- if test -n "$hardcode_libdir_separator"; then -+ if test -n "$acl_hardcode_libdir_separator"; then - dnl Weird platform: only the last -rpath option counts, the user must - dnl pass all path elements in one option. We can arrange that for a - dnl single library, but not when more than one $LIBNAMEs are used. - alldirs= - for found_dir in $rpathdirs; do -- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" -+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" - done -- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. -+ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. - acl_save_libdir="$libdir" - libdir="$alldirs" -- eval flag=\"$hardcode_libdir_flag_spec\" -+ eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - else -@@ -516,7 +596,7 @@ - for found_dir in $rpathdirs; do - acl_save_libdir="$libdir" - libdir="$found_dir" -- eval flag=\"$hardcode_libdir_flag_spec\" -+ eval flag=\"$acl_hardcode_libdir_flag_spec\" - libdir="$acl_save_libdir" - LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" - done -@@ -551,3 +631,79 @@ - fi - done - ]) -+ -+dnl For those cases where a variable contains several -L and -l options -+dnl referring to unknown libraries and directories, this macro determines the -+dnl necessary additional linker options for the runtime path. -+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) -+dnl sets LDADDVAR to linker options needed together with LIBSVALUE. -+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, -+dnl otherwise linking without libtool is assumed. -+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], -+[ -+ AC_REQUIRE([AC_LIB_RPATH]) -+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) -+ $1= -+ if test "$enable_rpath" != no; then -+ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then -+ dnl Use an explicit option to hardcode directories into the resulting -+ dnl binary. -+ rpathdirs= -+ next= -+ for opt in $2; do -+ if test -n "$next"; then -+ dir="$next" -+ dnl No need to hardcode the standard /usr/lib. -+ if test "X$dir" != "X/usr/$acl_libdirstem"; then -+ rpathdirs="$rpathdirs $dir" -+ fi -+ next= -+ else -+ case $opt in -+ -L) next=yes ;; -+ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` -+ dnl No need to hardcode the standard /usr/lib. -+ if test "X$dir" != "X/usr/$acl_libdirstem"; then -+ rpathdirs="$rpathdirs $dir" -+ fi -+ next= ;; -+ *) next= ;; -+ esac -+ fi -+ done -+ if test "X$rpathdirs" != "X"; then -+ if test -n ""$3""; then -+ dnl libtool is used for linking. Use -R options. -+ for dir in $rpathdirs; do -+ $1="${$1}${$1:+ }-R$dir" -+ done -+ else -+ dnl The linker is used for linking directly. -+ if test -n "$acl_hardcode_libdir_separator"; then -+ dnl Weird platform: only the last -rpath option counts, the user -+ dnl must pass all path elements in one option. -+ alldirs= -+ for dir in $rpathdirs; do -+ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" -+ done -+ acl_save_libdir="$libdir" -+ libdir="$alldirs" -+ eval flag=\"$acl_hardcode_libdir_flag_spec\" -+ libdir="$acl_save_libdir" -+ $1="$flag" -+ else -+ dnl The -rpath options are cumulative. -+ for dir in $rpathdirs; do -+ acl_save_libdir="$libdir" -+ libdir="$dir" -+ eval flag=\"$acl_hardcode_libdir_flag_spec\" -+ libdir="$acl_save_libdir" -+ $1="${$1}${$1:+ }$flag" -+ done -+ fi -+ fi -+ fi -+ fi -+ fi -+ AC_SUBST([$1]) -+]) -diff -urN b/m4/lib-prefix.m4 c/m4/lib-prefix.m4 ---- b/m4/lib-prefix.m4 2008-01-05 18:49:17.000000000 +0100 -+++ c/m4/lib-prefix.m4 2010-02-15 10:39:25.710466533 +0100 -@@ -1,4 +1,4 @@ --# lib-prefix.m4 serial 4 (gettext-0.14.2) -+# lib-prefix.m4 serial 5 (gettext-0.15) - dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. - dnl This file is free software; the Free Software Foundation - dnl gives unlimited permission to copy and/or distribute it, -@@ -24,6 +24,7 @@ - AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_CANONICAL_HOST]) -+ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) - AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) - dnl By default, look in $includedir and $libdir. - use_additional=yes -@@ -45,7 +46,7 @@ - ]) - else - additional_includedir="$withval/include" -- additional_libdir="$withval/lib" -+ additional_libdir="$withval/$acl_libdirstem" - fi - fi - ]) -@@ -87,7 +88,7 @@ - dnl 2. if it's already present in $LDFLAGS, - dnl 3. if it's /usr/local/lib and we are using GCC on Linux, - dnl 4. if it doesn't exist as a directory. -- if test "X$additional_libdir" != "X/usr/lib"; then -+ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then - haveit= - for x in $LDFLAGS; do - AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) -@@ -97,7 +98,7 @@ - fi - done - if test -z "$haveit"; then -- if test "X$additional_libdir" = "X/usr/local/lib"; then -+ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then - if test -n "$GCC"; then - case $host_os in - linux*) haveit=yes;; -@@ -151,3 +152,34 @@ - exec_prefix="$acl_save_exec_prefix" - prefix="$acl_save_prefix" - ]) -+ -+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing -+dnl the basename of the libdir, either "lib" or "lib64". -+AC_DEFUN([AC_LIB_PREPARE_MULTILIB], -+[ -+ dnl There is no formal standard regarding lib and lib64. The current -+ dnl practice is that on a system supporting 32-bit and 64-bit instruction -+ dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit -+ dnl libraries go under $prefix/lib. We determine the compiler's default -+ dnl mode by looking at the compiler's library search path. If at least -+ dnl of its elements ends in /lib64 or points to a directory whose absolute -+ dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the -+ dnl default, namely "lib". -+ acl_libdirstem=lib -+ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` -+ if test -n "$searchpath"; then -+ acl_save_IFS="${IFS= }"; IFS=":" -+ for searchdir in $searchpath; do -+ if test -d "$searchdir"; then -+ case "$searchdir" in -+ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; -+ *) searchdir=`cd "$searchdir" && pwd` -+ case "$searchdir" in -+ */lib64 ) acl_libdirstem=lib64 ;; -+ esac ;; -+ esac -+ fi -+ done -+ IFS="$acl_save_IFS" -+ fi -+]) -diff -urN b/SConstruct c/SConstruct ---- b/SConstruct 2010-02-15 10:42:41.522349056 +0100 -+++ c/SConstruct 2010-02-15 10:38:27.636218961 +0100 -@@ -459,15 +459,15 @@ - - - # Command line options --opts = Options('options.cache') -+opts = Variables('options.cache') - --opts.AddOptions( -+opts.AddVariables( - ( - 'prefix', - 'Installation prefix directory', - '/usr' - ), -- EnumOption( -+ EnumVariable( - 'debug', - 'Debug version (useful for developers only)', - 'no', -@@ -475,7 +475,7 @@ - map = { }, - ignorecase = 1 - ), -- EnumOption( -+ EnumVariable( - 'with_messaging', - 'Messaging support (connection to mail store/transport servers)', - 'yes', -@@ -483,7 +483,7 @@ - map = { }, - ignorecase = 1 - ), -- EnumOption( -+ EnumVariable( - 'with_filesystem', - 'Enable file-system support (this is needed for "maildir" messaging support)', - 'yes', -@@ -509,7 +509,7 @@ - + 'Currently available platform handlers: posix.', - '"posix"' - ), -- EnumOption( -+ EnumVariable( - 'with_sasl', - 'Enable SASL support (requires GNU SASL library)', - 'yes', -@@ -517,7 +517,7 @@ - map = { }, - ignorecase = 1 - ), -- EnumOption( -+ EnumVariable( - 'with_tls', - 'Enable TLS support (requires GNU TLS library)', - 'yes', -@@ -530,7 +530,7 @@ - 'Specifies the path to sendmail.', - defaultSendmailPath - ), -- EnumOption( -+ EnumVariable( - 'byte_order', - 'Byte order (Big Endian or Little Endian)', - sys.byteorder, -@@ -538,7 +538,7 @@ - map = { }, - ignorecase = 1 - ), -- EnumOption( -+ EnumVariable( - 'pf_8bit_type', - 'The C-language 8-bit type for your platform', - 'char', -@@ -546,7 +546,7 @@ - map = { }, - ignorecase = 1 - ), -- EnumOption( -+ EnumVariable( - 'pf_16bit_type', - 'The C-language 16-bit type for your platform', - 'short', -@@ -554,7 +554,7 @@ - map = { }, - ignorecase = 1 - ), -- EnumOption( -+ EnumVariable( - 'pf_32bit_type', - 'The C-language 32-bit type for your platform', - 'int', -@@ -562,7 +562,7 @@ - map = { }, - ignorecase = 1 - ), -- EnumOption( -+ EnumVariable( - 'build_tests', - 'Build unit tests (run with "scons run-tests")', - 'no', -@@ -1364,7 +1364,7 @@ - $CXX -c $CFLAGS $CPPFLAGS mytest.$ac_ext >&5 - sh libtool --mode=link $CXX -o mytest mytest.o libtest.la >&5 2>/dev/null - --if test -x mytest; then -+if test -x mytest -a "$cross_compiling" != yes; then - myresult=`./mytest` - if test "X$myresult" = "XPASS"; then - AC_MSG_RESULT(yes) diff --git a/src/vmime-0.9.1-svn-r534-20100218.patch b/src/vmime-0.9.1-svn-r534-20100218.patch deleted file mode 100644 index 5a66916..0000000 --- a/src/vmime-0.9.1-svn-r534-20100218.patch +++ /dev/null @@ -1,12 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/bootstrap b/bootstrap ---- a/bootstrap 2010-02-18 02:25:13.325568851 +0100 -+++ b/bootstrap 2010-02-18 02:26:04.310693246 +0100 -@@ -1,4 +1,5 @@ - #! /bin/bash -+#! /usr/bin/env bash - # - # Bootstrap file for 'autotools' build - # diff --git a/src/vmime-0.9.1-svn-r537-20100310.patch b/src/vmime-0.9.1-svn-r537-20100310.patch deleted file mode 100644 index dbceb33..0000000 --- a/src/vmime-0.9.1-svn-r537-20100310.patch +++ /dev/null @@ -1,65 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/bootstrap b/bootstrap ---- a/bootstrap 2010-03-12 09:49:06.176332875 +0100 -+++ b/bootstrap 2010-03-12 09:50:54.138458453 +0100 -@@ -13,6 +13,13 @@ - (mkdir autotools >& /dev/null) - (cd autotools && rm -f config.guess config.sub missing mkinstalldirs compile ltmain.sh depcomp install-sh) - -+# Check for "glibtoolize" instead of "libtoolize" on OSX -+LIBTOOLIZE=libtoolize -+if which glibtoolize > /dev/null 2>&1; then -+ LIBTOOLIZE=glibtoolize -+fi -+ -+ - DIE=0 - - echo "" -@@ -36,7 +43,7 @@ - fi - - if test $DIE = 0 ; then -- echo -n "* Running libtoolize... " ; (libtoolize --copy --force --automake >& bootstrap.tmpout) \ -+ echo -n "* Running libtoolize... " ; ($LIBTOOLIZE --copy --force --automake >& bootstrap.tmpout) \ - && (echo "[OK]" ; cat bootstrap.tmpout ; rm -f bootstrap.tmpout) \ - || (echo "[NO]" ; cat bootstrap.tmpout ; rm -f bootstrap.tmpout ; not_a_command >& /dev/null) || DIE=1 - fi -diff -urN a/src/security/sasl/defaultSASLAuthenticator.cpp b/src/security/sasl/defaultSASLAuthenticator.cpp ---- a/src/security/sasl/defaultSASLAuthenticator.cpp 2010-03-12 09:48:28.343325021 +0100 -+++ b/src/security/sasl/defaultSASLAuthenticator.cpp 2010-03-12 09:50:54.138458453 +0100 -@@ -96,7 +96,7 @@ - - const string defaultSASLAuthenticator::getServiceName() const - { -- return m_saslSession->getServiceName(); -+ return m_saslSession.acquire()->getServiceName(); - } - - -@@ -121,7 +121,7 @@ - - ref defaultSASLAuthenticator::getSASLSession() const - { -- return m_saslSession; -+ return m_saslSession.acquire().constCast (); - } - - -diff -urN a/vmime/security/sasl/defaultSASLAuthenticator.hpp b/vmime/security/sasl/defaultSASLAuthenticator.hpp ---- a/vmime/security/sasl/defaultSASLAuthenticator.hpp 2010-03-12 09:48:28.373325002 +0100 -+++ b/vmime/security/sasl/defaultSASLAuthenticator.hpp 2010-03-12 09:50:54.138458453 +0100 -@@ -67,10 +67,8 @@ - - defaultAuthenticator m_default; - -- - weak_ref m_service; -- -- ref m_saslSession; -+ weak_ref m_saslSession; - ref m_saslMech; - }; - diff --git a/src/vmime-0.9.1-svn-r540-20100316.patch b/src/vmime-0.9.1-svn-r540-20100316.patch deleted file mode 100644 index 1099956..0000000 --- a/src/vmime-0.9.1-svn-r540-20100316.patch +++ /dev/null @@ -1,100 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN b/SConstruct c/SConstruct ---- b/SConstruct 2010-03-29 00:54:38.397987385 +0200 -+++ c/SConstruct 2010-03-29 00:57:19.822986846 +0200 -@@ -436,7 +436,7 @@ - # Set options # - ################# - --EnsureSConsVersion(0, 94) -+EnsureSConsVersion(0, 98, 1) - - SetOption('implicit_cache', 1) - -@@ -578,7 +578,10 @@ - # Configuration Environment # - ############################### - --env = Environment(options = opts) -+try: -+ env = Environment(variables = opts) -+except TypeError: -+ env = Environment(options = opts) - - env.Append(ENV = os.environ) - env.Append(ENV = {'PATH' : os.environ['PATH']}) -@@ -953,7 +956,7 @@ - # Tests - if env['build_tests'] == 'yes': - if env['debug'] == 'yes': -- env = env.Copy() -+ env = env.Clone() - env.Append(LIBS = ['cppunit', 'dl', packageVersionedGenericName + '-debug', 'pthread']) - env.Append(LIBPATH=['.']) - Default( -diff -urN b/src/mailbox.cpp c/src/mailbox.cpp ---- b/src/mailbox.cpp 2010-03-29 00:54:29.510858398 +0200 -+++ c/src/mailbox.cpp 2010-03-29 00:57:19.822986846 +0200 -@@ -311,7 +311,7 @@ - // (email address is mandatory, whereas name is optional). - if (address.empty() && !name.empty()) - { -- m_email.empty(); -+ m_email.clear(); - m_email.reserve(name.size()); - m_name.removeAllWords(); - -@@ -324,7 +324,7 @@ - else - { - text::decodeAndUnfold(name, &m_name); -- m_email.empty(); -+ m_email.clear(); - m_email.reserve(address.size()); - - for (string::size_type i = 0 ; i < address.size() ; ++i) -diff -urN b/src/platforms/posix/posixFile.cpp c/src/platforms/posix/posixFile.cpp ---- b/src/platforms/posix/posixFile.cpp 2010-03-29 00:54:29.522857280 +0200 -+++ c/src/platforms/posix/posixFile.cpp 2010-03-29 00:57:19.821867144 +0200 -@@ -306,6 +306,9 @@ - - if (::stat(m_nativePath.c_str(), &buf) == -1) - { -+ if (errno == ENOENT) -+ return false; -+ - posixFileSystemFactory::reportError(m_path, errno); - return false; - } -@@ -320,6 +323,9 @@ - - if (::stat(m_nativePath.c_str(), &buf) == -1) - { -+ if (errno == ENOENT) -+ return false; -+ - posixFileSystemFactory::reportError(m_path, errno); - return false; - } -@@ -334,6 +340,9 @@ - - if (::stat(m_nativePath.c_str(), &buf) == -1) - { -+ if (errno == ENOENT) -+ return false; -+ - posixFileSystemFactory::reportError(m_path, errno); - return false; - } -@@ -349,6 +358,9 @@ - - if (::stat(m_nativePath.c_str(), &buf) == -1) - { -+ if (errno == ENOENT) -+ return false; -+ - posixFileSystemFactory::reportError(m_path, errno); - return false; - } diff --git a/src/vmime-0.9.1-svn-r542-20100410.patch b/src/vmime-0.9.1-svn-r542-20100410.patch deleted file mode 100644 index 31762d6..0000000 --- a/src/vmime-0.9.1-svn-r542-20100410.patch +++ /dev/null @@ -1,92 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/bootstrap b/bootstrap ---- a/bootstrap 2010-04-11 15:55:51.526807677 +0200 -+++ b/bootstrap 2010-04-11 16:02:47.027050352 +0200 -@@ -1,4 +1,3 @@ --#! /bin/bash - #! /usr/bin/env bash - # - # Bootstrap file for 'autotools' build -diff -urN a/src/parameterizedHeaderField.cpp b/src/parameterizedHeaderField.cpp ---- a/src/parameterizedHeaderField.cpp 2010-04-11 15:55:51.482792934 +0200 -+++ b/src/parameterizedHeaderField.cpp 2010-04-11 16:02:47.026046027 +0200 -@@ -85,12 +85,32 @@ - const string::value_type* const pstart = buffer.data() + position; - const string::value_type* p = pstart; - -- const string::size_type start = position; -+ // Skip non-significant whitespaces -+ string::size_type valueStart = position; - -- while (p < pend && *p != ';') ++p; -+ while (p < pend && parserHelpers::isSpace(*p)) -+ { -+ ++p; -+ ++valueStart; -+ } - -- getValue()->parse(buffer, start, position + (p - pstart)); -+ // Advance up to ';', if any -+ string::size_type valueLength = 0; - -+ while (p < pend && *p != ';') // FIXME: support ";" inside quoted or RFC-2047-encoded text -+ { -+ ++p; -+ ++valueLength; -+ } -+ -+ // Trim whitespaces at the end of the value -+ while (valueLength > 0 && parserHelpers::isSpace(buffer[valueStart + valueLength - 1])) -+ --valueLength; -+ -+ // Parse value -+ getValue()->parse(buffer, valueStart, valueStart + valueLength); -+ -+ // Reset parameters - removeAllParameters(); - - // If there is one or more parameters following... -diff -urN a/tests/parser/parameterTest.cpp b/tests/parser/parameterTest.cpp ---- a/tests/parser/parameterTest.cpp 2010-04-11 15:55:51.494792999 +0200 -+++ b/tests/parser/parameterTest.cpp 2010-04-11 16:02:47.026046027 +0200 -@@ -36,6 +36,7 @@ - VMIME_TEST(testGenerate) - VMIME_TEST(testGenerateRFC2231) - VMIME_TEST(testNonStandardEncodedParam) -+ VMIME_TEST(testParseNonSignificantWS) - VMIME_TEST_LIST_END - - -@@ -53,6 +54,7 @@ - }; - - -+#define FIELD_VALUE(f) (f.getValue()->generate()) - #define PARAM_VALUE(p, n) (p.getParameterAt(n)->getValue().generate()) - #define PARAM_NAME(p, n) (p.getParameterAt(n)->getName()) - #define PARAM_CHARSET(p, n) \ -@@ -278,5 +280,22 @@ - VASSERT_EQ("2.3", "Logo VMime.png", PARAM_VALUE(p2, 0)); - } - -+ // Parse parameters with non-significant whitespaces -+ void testParseNonSignificantWS() -+ { -+ parameterizedHeaderField p1; -+ p1.parse(" \t X \r\n"); -+ -+ VASSERT_EQ("1.1", "X", FIELD_VALUE(p1)); -+ -+ parameterizedHeaderField p2; -+ p2.parse(" X ; param1 = value1 \r\n"); -+ -+ VASSERT_EQ("2.1", 1, p2.getParameterCount()); -+ VASSERT_EQ("2.2", "X", FIELD_VALUE(p2)); -+ VASSERT_EQ("2.3", "param1", PARAM_NAME(p2, 0)); -+ VASSERT_EQ("2.4", "value1", PARAM_VALUE(p2, 0)); -+ } -+ - VMIME_TEST_SUITE_END - diff --git a/src/vmime-0.9.1-svn-r545-20100504.patch b/src/vmime-0.9.1-svn-r545-20100504.patch deleted file mode 100644 index 7e0bba3..0000000 --- a/src/vmime-0.9.1-svn-r545-20100504.patch +++ /dev/null @@ -1,77 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/SConstruct b/SConstruct ---- a/SConstruct 2010-05-10 21:21:02.535809341 +0200 -+++ b/SConstruct 2010-05-10 21:21:28.163800740 +0200 -@@ -1071,7 +1071,7 @@ - # Generate pkg-config file for shared and static library - vmime_pc_in = open(packageVersionedGenericName + ".pc.in", 'w') - vmime_pc_in.write("# File automatically generated by SConstruct ('scons autotools')\n") -- vmime_pc_in.write("# DOT NOT EDIT!\n") -+ vmime_pc_in.write("# DO NOT EDIT!\n") - vmime_pc_in.write("\n") - vmime_pc_in.write("prefix=@prefix@\n") - vmime_pc_in.write("exec_prefix=@exec_prefix@\n") -@@ -1091,7 +1091,7 @@ - Makefile_am = open("Makefile.am", 'w') - Makefile_am.write(""" - # File automatically generated by SConstruct ('scons autotools') --# DOT NOT EDIT! -+# DO NOT EDIT! - - BINDING = - INCLUDE = vmime -@@ -1123,7 +1123,7 @@ - Makefile_am = open("vmime/Makefile.am", 'w') - Makefile_am.write(""" - # File automatically generated by SConstruct ('scons autotools') --# DOT NOT EDIT! -+# DO NOT EDIT! - """) - - #Makefile_am.write(packageVersionedName + "includedir = $(prefix)/include/@GENERIC_VERSIONED_LIBRARY_NAME@/@GENERIC_LIBRARY_NAME@\n") -@@ -1145,7 +1145,7 @@ - Makefile_am = open("src/Makefile.am", 'w') - Makefile_am.write(""" - # File automatically generated by SConstruct ('scons autotools') --# DOT NOT EDIT! -+# DO NOT EDIT! - - AUTOMAKE_OPTIONS = no-dependencies foreign - INTERNALS = -@@ -1235,7 +1235,7 @@ - # configure.in - - # File automatically generated by SConstruct ('scons autotools') --# DOT NOT EDIT! -+# DO NOT EDIT! - - # Init - """) -diff -urN a/src/net/imap/IMAPConnection.cpp b/src/net/imap/IMAPConnection.cpp ---- a/src/net/imap/IMAPConnection.cpp 2010-05-10 21:21:02.392809549 +0200 -+++ b/src/net/imap/IMAPConnection.cpp 2010-05-10 21:21:28.163800740 +0200 -@@ -156,7 +156,7 @@ - const bool tlsRequired = HAS_PROPERTY(PROPERTY_CONNECTION_TLS_REQUIRED) - && GET_PROPERTY(bool, PROPERTY_CONNECTION_TLS_REQUIRED); - -- if (!store->isSecuredConnection() && tls) // only if not IMAPS -+ if (!store->isIMAPS() && tls) // only if not IMAPS - { - try - { -diff -urN a/src/utility/encoder/encoderFactory.cpp b/src/utility/encoder/encoderFactory.cpp ---- a/src/utility/encoder/encoderFactory.cpp 2010-05-10 21:21:02.431820130 +0200 -+++ b/src/utility/encoder/encoderFactory.cpp 2010-05-10 21:21:28.163800740 +0200 -@@ -46,6 +46,10 @@ - registerName ("7bit"); - registerName ("8bit"); - registerName ("binary"); -+ -+ // Also register some non-standard encoding names -+ registerName ("7-bit"); -+ registerName ("8-bit"); - } - - diff --git a/src/vmime-0.9.1-svn-r546-20100514.patch b/src/vmime-0.9.1-svn-r546-20100514.patch deleted file mode 100644 index f46e138..0000000 --- a/src/vmime-0.9.1-svn-r546-20100514.patch +++ /dev/null @@ -1,19 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/src/headerField.cpp b/src/headerField.cpp ---- a/src/headerField.cpp 2010-05-15 20:36:05.685783611 +0200 -+++ b/src/headerField.cpp 2010-05-15 20:36:18.853452026 +0200 -@@ -146,6 +146,12 @@ - { - c = buffer[pos]; - -+ // Check for folded line -+ if (c == '\r' && pos + 2 < end && buffer[pos + 1] == '\n' && -+ (buffer[pos + 2] == ' ' || buffer[pos + 2] == '\t')) -+ { -+ pos += 3; -+ } - // Check for end of contents - if (c == '\r' && pos + 1 < end && buffer[pos + 1] == '\n') - { diff --git a/src/vmime-0.9.1-svn-r551-20100520.patch b/src/vmime-0.9.1-svn-r551-20100520.patch deleted file mode 100644 index 8d55013..0000000 --- a/src/vmime-0.9.1-svn-r551-20100520.patch +++ /dev/null @@ -1,1337 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/ChangeLog b/ChangeLog ---- a/ChangeLog 2010-05-21 09:06:26.955934365 +0200 -+++ b/ChangeLog 2010-05-21 09:07:53.363928193 +0200 -@@ -2,6 +2,11 @@ - VERSION 0.9.1svn - ================ - -+2010-05-18 Vincent Richard -+ -+ * net/*: added helper function vmime::net::message::getParsedMessage() -+ to construct a RFC-822 parsed message from a net message. -+ - 2009-09-06 Vincent Richard - - * Relicensed VMime under the GNU GPL license version 3. Dual licensing -diff -urN a/SConstruct b/SConstruct ---- a/SConstruct 2010-05-21 09:06:27.116428601 +0200 -+++ b/SConstruct 2010-05-21 09:07:53.367948000 +0200 -@@ -261,6 +261,9 @@ - 'net/imap/IMAPMessage.cpp', 'net/imap/IMAPMessage.hpp', - 'net/imap/IMAPTag.cpp', 'net/imap/IMAPTag.hpp', - 'net/imap/IMAPUtils.cpp', 'net/imap/IMAPUtils.hpp', -+ 'net/imap/IMAPMessagePartContentHandler.cpp', 'net/imap/IMAPMessagePartContentHandler.hpp', -+ 'net/imap/IMAPStructure.cpp', 'net/imap/IMAPStructure.hpp', -+ 'net/imap/IMAPPart.cpp', 'net/imap/IMAPPart.hpp', - 'net/imap/IMAPParser.hpp', - ] - ], -@@ -959,6 +962,10 @@ - env = env.Clone() - env.Append(LIBS = ['cppunit', 'dl', packageVersionedGenericName + '-debug', 'pthread']) - env.Append(LIBPATH=['.']) -+ -+ if sys.platform == "mac" or sys.platform == "darwin": -+ env.Append(LIBS = ['iconv', 'gcrypt']) -+ - Default( - env.Program( - target = 'run-tests', -diff -urN a/src/bodyPart.cpp b/src/bodyPart.cpp ---- a/src/bodyPart.cpp 2010-05-21 09:06:26.964428162 +0200 -+++ b/src/bodyPart.cpp 2010-05-21 09:07:53.367948000 +0200 -@@ -37,6 +37,15 @@ - } - - -+bodyPart::bodyPart(weak_ref parentPart) -+ : m_header(vmime::create
()), -+ m_body(vmime::create ()), -+ m_parent(parentPart) -+{ -+ m_body->setParentPart(thisRef().dynamicCast ()); -+} -+ -+ - void bodyPart::parse(const string& buffer, const string::size_type position, - const string::size_type end, string::size_type* newPosition) - { -diff -urN a/src/headerField.cpp b/src/headerField.cpp ---- a/src/headerField.cpp 2010-05-21 09:06:27.120433672 +0200 -+++ b/src/headerField.cpp 2010-05-21 09:07:53.367948000 +0200 -@@ -300,7 +300,8 @@ - { - std::vector > list; - -- list.push_back(m_value); -+ if (m_value) -+ list.push_back(m_value); - - return (list); - } -diff -urN a/src/net/imap/IMAPMessage.cpp b/src/net/imap/IMAPMessage.cpp ---- a/src/net/imap/IMAPMessage.cpp 2010-05-21 09:06:26.984436060 +0200 -+++ b/src/net/imap/IMAPMessage.cpp 2010-05-21 09:07:53.363928193 +0200 -@@ -27,6 +27,9 @@ - #include "vmime/net/imap/IMAPStore.hpp" - #include "vmime/net/imap/IMAPConnection.hpp" - #include "vmime/net/imap/IMAPUtils.hpp" -+#include "vmime/net/imap/IMAPStructure.hpp" -+#include "vmime/net/imap/IMAPPart.hpp" -+#include "vmime/net/imap/IMAPMessagePartContentHandler.hpp" - - #include - #include -@@ -38,198 +41,6 @@ - namespace imap { - - --// --// IMAPpart --// -- --class IMAPstructure; -- --class IMAPpart : public part --{ --private: -- -- friend class vmime::creator; -- -- IMAPpart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart); -- IMAPpart(ref parent, const int number, const IMAPParser::body_type_1part* part); -- --public: -- -- ref getStructure() const; -- ref getStructure(); -- -- ref getParent() const { return m_parent.acquire(); } -- -- const mediaType& getType() const { return (m_mediaType); } -- int getSize() const { return (m_size); } -- int getNumber() const { return (m_number); } -- -- ref getHeader() const -- { -- if (m_header == NULL) -- throw exceptions::unfetched_object(); -- else -- return m_header; -- } -- -- -- static ref create -- (ref parent, const int number, const IMAPParser::body* body) -- { -- if (body->body_type_mpart()) -- { -- ref part = vmime::create (parent, number, body->body_type_mpart()); -- part->m_structure = vmime::create (part, body->body_type_mpart()->list()); -- -- return part; -- } -- else -- { -- return vmime::create (parent, number, body->body_type_1part()); -- } -- } -- -- -- header& getOrCreateHeader() -- { -- if (m_header != NULL) -- return (*m_header); -- else -- return (*(m_header = vmime::create
())); -- } -- --private: -- -- ref m_structure; -- weak_ref m_parent; -- ref
m_header; -- -- int m_number; -- int m_size; -- mediaType m_mediaType; --}; -- -- -- --// --// IMAPstructure --// -- --class IMAPstructure : public structure --{ --public: -- -- IMAPstructure() -- { -- } -- -- IMAPstructure(const IMAPParser::body* body) -- { -- m_parts.push_back(IMAPpart::create(NULL, 0, body)); -- } -- -- IMAPstructure(ref parent, const std::vector & list) -- { -- int number = 0; -- -- for (std::vector ::const_iterator -- it = list.begin() ; it != list.end() ; ++it, ++number) -- { -- m_parts.push_back(IMAPpart::create(parent, number, *it)); -- } -- } -- -- -- ref getPartAt(const int x) const -- { -- return m_parts[x]; -- } -- -- ref getPartAt(const int x) -- { -- return m_parts[x]; -- } -- -- int getPartCount() const -- { -- return m_parts.size(); -- } -- -- -- static ref emptyStructure() -- { -- return (m_emptyStructure); -- } -- --private: -- -- static ref m_emptyStructure; -- -- std::vector > m_parts; --}; -- -- --ref IMAPstructure::m_emptyStructure = vmime::create (); -- -- -- --IMAPpart::IMAPpart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart) -- : m_parent(parent), m_header(NULL), m_number(number), m_size(0) --{ -- m_mediaType = vmime::mediaType -- ("multipart", mpart->media_subtype()->value()); --} -- -- --IMAPpart::IMAPpart(ref parent, const int number, const IMAPParser::body_type_1part* part) -- : m_parent(parent), m_header(NULL), m_number(number), m_size(0) --{ -- if (part->body_type_text()) -- { -- m_mediaType = vmime::mediaType -- ("text", part->body_type_text()-> -- media_text()->media_subtype()->value()); -- -- m_size = part->body_type_text()->body_fields()->body_fld_octets()->value(); -- } -- else if (part->body_type_msg()) -- { -- m_mediaType = vmime::mediaType -- ("message", part->body_type_msg()-> -- media_message()->media_subtype()->value()); -- } -- else -- { -- m_mediaType = vmime::mediaType -- (part->body_type_basic()->media_basic()->media_type()->value(), -- part->body_type_basic()->media_basic()->media_subtype()->value()); -- -- m_size = part->body_type_basic()->body_fields()->body_fld_octets()->value(); -- } -- -- m_structure = NULL; --} -- -- --ref IMAPpart::getStructure() const --{ -- if (m_structure != NULL) -- return (m_structure); -- else -- return (IMAPstructure::emptyStructure()); --} -- -- --ref IMAPpart::getStructure() --{ -- if (m_structure != NULL) -- return (m_structure); -- else -- return (IMAPstructure::emptyStructure()); --} -- -- -- - #ifndef VMIME_BUILDING_DOC - - // -@@ -400,7 +211,22 @@ - - extract(p, ossAdapter, NULL, 0, -1, true, true); - -- p.dynamicCast ()->getOrCreateHeader().parse(oss.str()); -+ p.dynamicCast ()->getOrCreateHeader().parse(oss.str()); -+} -+ -+ -+void IMAPMessage::fetchPartHeaderForStructure(ref str) -+{ -+ for (int i = 0, n = str->getPartCount() ; i < n ; ++i) -+ { -+ ref part = str->getPartAt(i); -+ -+ // Fetch header of current part -+ fetchPartHeader(part); -+ -+ // Fetch header of sub-parts -+ fetchPartHeaderForStructure(part->getStructure()); -+ } - } - - -@@ -418,7 +244,7 @@ - - if (p != NULL) - { -- ref currentPart = p.dynamicCast (); -+ ref currentPart = p.dynamicCast (); - std::vector numbers; - - numbers.push_back(currentPart->getNumber()); -@@ -446,8 +272,17 @@ - command << "FETCH " << m_num << " BODY"; - if (peek) command << ".PEEK"; - command << "["; -- command << section.str(); -- if (headerOnly) command << ".MIME"; // "MIME" not "HEADER" for parts -+ -+ if (section.str().empty() && headerOnly) -+ { -+ command << "HEADER"; -+ } -+ else -+ { -+ command << section.str(); -+ if (headerOnly) command << ".MIME"; // "MIME" not "HEADER" for parts -+ } -+ - command << "]"; - - if (start != 0 || length != -1) -@@ -621,7 +456,7 @@ - } - case IMAPParser::msg_att_item::BODY_STRUCTURE: - { -- m_structure = vmime::create ((*it)->body()); -+ m_structure = vmime::create ((*it)->body()); - break; - } - case IMAPParser::msg_att_item::RFC822_HEADER: -@@ -796,6 +631,80 @@ - } - - -+void IMAPMessage::constructParsedMessage(ref parentPart, ref str, int level) -+{ -+ if (level == 0) -+ { -+ ref part = str->getPartAt(0); -+ -+ // Copy header -+ ref hdr = part->getHeader(); -+ parentPart->getHeader()->copyFrom(*hdr); -+ -+ // Initialize body -+ parentPart->getBody()->setContents -+ (vmime::create -+ (thisRef().dynamicCast (), -+ part, parentPart->getBody()->getEncoding())); -+ -+ constructParsedMessage(parentPart, part->getStructure(), 1); -+ } -+ else -+ { -+ for (int i = 0, n = str->getPartCount() ; i < n ; ++i) -+ { -+ ref part = str->getPartAt(i); -+ -+ ref childPart = vmime::create (); -+ -+ // Copy header -+ ref hdr = part->getHeader(); -+ childPart->getHeader()->copyFrom(*hdr); -+ -+ // Initialize body -+ childPart->getBody()->setContents -+ (vmime::create -+ (thisRef().dynamicCast (), -+ part, childPart->getBody()->getEncoding())); -+ -+ // Add child part -+ parentPart->getBody()->appendPart(childPart); -+ -+ // Construct sub parts -+ constructParsedMessage(childPart, part->getStructure(), ++level); -+ } -+ } -+} -+ -+ -+ref IMAPMessage::getParsedMessage() -+{ -+ // Fetch structure -+ ref structure = NULL; -+ -+ try -+ { -+ structure = getStructure(); -+ } -+ catch (exceptions::unfetched_object&) -+ { -+ fetch(m_folder.acquire(), IMAPFolder::FETCH_STRUCTURE); -+ structure = getStructure(); -+ } -+ -+ // Fetch header for each part -+ fetchPartHeaderForStructure(structure); -+ -+ // Construct message from structure -+ ref msg = vmime::create (); -+ -+ constructParsedMessage(msg, structure); -+ -+ return msg; -+} -+ -+ - } // imap - } // net - } // vmime -+ -diff -urN a/src/net/imap/IMAPMessagePartContentHandler.cpp b/src/net/imap/IMAPMessagePartContentHandler.cpp ---- a/src/net/imap/IMAPMessagePartContentHandler.cpp 1970-01-01 01:00:00.000000000 +0100 -+++ b/src/net/imap/IMAPMessagePartContentHandler.cpp 2010-05-21 09:07:53.363928193 +0200 -@@ -0,0 +1,179 @@ -+// -+// VMime library (http://www.vmime.org) -+// Copyright (C) 2002-2009 Vincent Richard -+// -+// 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 3 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-1301 USA. -+// -+// 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 cover the whole combination. -+// -+ -+#include "vmime/net/imap/IMAPMessagePartContentHandler.hpp" -+ -+ -+namespace vmime { -+namespace net { -+namespace imap { -+ -+ -+IMAPMessagePartContentHandler::IMAPMessagePartContentHandler -+ (ref msg, ref part, const vmime::encoding& encoding) -+ : m_message(msg), m_part(part), m_encoding(encoding) -+{ -+} -+ -+ -+ref IMAPMessagePartContentHandler::clone() const -+{ -+ return create -+ (m_message.acquire().constCast (), -+ m_part.acquire().constCast (), -+ m_encoding); -+} -+ -+ -+void IMAPMessagePartContentHandler::generate -+ (utility::outputStream& os, const vmime::encoding& enc, const string::size_type maxLineLength) const -+{ -+ ref msg = m_message.acquire().constCast (); -+ ref part = m_part.acquire().constCast (); -+ -+ // Data is already encoded -+ if (isEncoded()) -+ { -+ // The data is already encoded but the encoding specified for -+ // the generation is different from the current one. We need -+ // to re-encode data: decode from input buffer to temporary -+ // buffer, and then re-encode to output stream... -+ if (m_encoding != enc) -+ { -+ // Extract part contents to temporary buffer -+ std::ostringstream oss; -+ utility::outputStreamAdapter tmp(oss); -+ -+ msg->extractPart(part, tmp, NULL); -+ -+ // Decode to another temporary buffer -+ utility::inputStreamStringProxyAdapter in(oss.str()); -+ -+ std::ostringstream oss2; -+ utility::outputStreamAdapter tmp2(oss2); -+ -+ ref theDecoder = m_encoding.getEncoder(); -+ theDecoder->decode(in, tmp2); -+ -+ // Reencode to output stream -+ string str = oss2.str(); -+ utility::inputStreamStringAdapter tempIn(str); -+ -+ ref theEncoder = enc.getEncoder(); -+ theEncoder->getProperties()["maxlinelength"] = maxLineLength; -+ theEncoder->encode(tempIn, os); -+ } -+ // No encoding to perform -+ else -+ { -+ msg->extractPart(part, os); -+ } -+ } -+ // Need to encode data before -+ else -+ { -+ // Extract part contents to temporary buffer -+ std::ostringstream oss; -+ utility::outputStreamAdapter tmp(oss); -+ -+ msg->extractPart(part, tmp, NULL); -+ -+ // Encode temporary buffer to output stream -+ ref theEncoder = enc.getEncoder(); -+ theEncoder->getProperties()["maxlinelength"] = maxLineLength; -+ -+ utility::inputStreamStringAdapter is(oss.str()); -+ -+ theEncoder->encode(is, os); -+ } -+} -+ -+ -+void IMAPMessagePartContentHandler::extract -+ (utility::outputStream& os, utility::progressListener* progress) const -+{ -+ ref msg = m_message.acquire().constCast (); -+ ref part = m_part.acquire().constCast (); -+ -+ // No decoding to perform -+ if (!isEncoded()) -+ { -+ msg->extractPart(part, os, progress); -+ } -+ // Need to decode data -+ else -+ { -+ // Extract part contents to temporary buffer -+ std::ostringstream oss; -+ utility::outputStreamAdapter tmp(oss); -+ -+ msg->extractPart(part, tmp, NULL); -+ -+ // Encode temporary buffer to output stream -+ utility::inputStreamStringAdapter is(oss.str()); -+ utility::progressListenerSizeAdapter plsa(progress, getLength()); -+ -+ ref theDecoder = m_encoding.getEncoder(); -+ theDecoder->decode(is, os, &plsa); -+ } -+} -+ -+ -+void IMAPMessagePartContentHandler::extractRaw -+ (utility::outputStream& os, utility::progressListener* progress) const -+{ -+ ref msg = m_message.acquire().constCast (); -+ ref part = m_part.acquire().constCast (); -+ -+ msg->extractPart(part, os, progress); -+} -+ -+ -+string::size_type IMAPMessagePartContentHandler::getLength() const -+{ -+ return m_part.acquire()->getSize(); -+} -+ -+ -+bool IMAPMessagePartContentHandler::isEncoded() const -+{ -+ return m_encoding != NO_ENCODING; -+} -+ -+ -+const vmime::encoding& IMAPMessagePartContentHandler::getEncoding() const -+{ -+ return m_encoding; -+} -+ -+ -+bool IMAPMessagePartContentHandler::isEmpty() const -+{ -+ return getLength() == 0; -+} -+ -+ -+} // imap -+} // net -+} // vmime -+ -diff -urN a/src/net/imap/IMAPPart.cpp b/src/net/imap/IMAPPart.cpp ---- a/src/net/imap/IMAPPart.cpp 1970-01-01 01:00:00.000000000 +0100 -+++ b/src/net/imap/IMAPPart.cpp 2010-05-21 09:07:53.367948000 +0200 -@@ -0,0 +1,152 @@ -+// -+// VMime library (http://www.vmime.org) -+// Copyright (C) 2002-2009 Vincent Richard -+// -+// 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 3 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-1301 USA. -+// -+// 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 cover the whole combination. -+// -+ -+#include "vmime/net/imap/IMAPPart.hpp" -+#include "vmime/net/imap/IMAPStructure.hpp" -+ -+ -+namespace vmime { -+namespace net { -+namespace imap { -+ -+ -+IMAPPart::IMAPPart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart) -+ : m_parent(parent), m_header(NULL), m_number(number), m_size(0) -+{ -+ m_mediaType = vmime::mediaType -+ ("multipart", mpart->media_subtype()->value()); -+} -+ -+ -+IMAPPart::IMAPPart(ref parent, const int number, const IMAPParser::body_type_1part* part) -+ : m_parent(parent), m_header(NULL), m_number(number), m_size(0) -+{ -+ if (part->body_type_text()) -+ { -+ m_mediaType = vmime::mediaType -+ ("text", part->body_type_text()-> -+ media_text()->media_subtype()->value()); -+ -+ m_size = part->body_type_text()->body_fields()->body_fld_octets()->value(); -+ } -+ else if (part->body_type_msg()) -+ { -+ m_mediaType = vmime::mediaType -+ ("message", part->body_type_msg()-> -+ media_message()->media_subtype()->value()); -+ } -+ else -+ { -+ m_mediaType = vmime::mediaType -+ (part->body_type_basic()->media_basic()->media_type()->value(), -+ part->body_type_basic()->media_basic()->media_subtype()->value()); -+ -+ m_size = part->body_type_basic()->body_fields()->body_fld_octets()->value(); -+ } -+ -+ m_structure = NULL; -+} -+ -+ -+ref IMAPPart::getStructure() const -+{ -+ if (m_structure != NULL) -+ return m_structure; -+ else -+ return IMAPStructure::emptyStructure(); -+} -+ -+ -+ref IMAPPart::getStructure() -+{ -+ if (m_structure != NULL) -+ return m_structure; -+ else -+ return IMAPStructure::emptyStructure(); -+} -+ -+ -+ref IMAPPart::getParent() const -+{ -+ return m_parent.acquire(); -+} -+ -+ -+const mediaType& IMAPPart::getType() const -+{ -+ return m_mediaType; -+} -+ -+ -+int IMAPPart::getSize() const -+{ -+ return m_size; -+} -+ -+ -+int IMAPPart::getNumber() const -+{ -+ return m_number; -+} -+ -+ -+ref IMAPPart::getHeader() const -+{ -+ if (m_header == NULL) -+ throw exceptions::unfetched_object(); -+ else -+ return m_header; -+} -+ -+ -+// static -+ref IMAPPart::create -+ (ref parent, const int number, const IMAPParser::body* body) -+{ -+ if (body->body_type_mpart()) -+ { -+ ref part = vmime::create (parent, number, body->body_type_mpart()); -+ part->m_structure = vmime::create (part, body->body_type_mpart()->list()); -+ -+ return part; -+ } -+ else -+ { -+ return vmime::create (parent, number, body->body_type_1part()); -+ } -+} -+ -+ -+header& IMAPPart::getOrCreateHeader() -+{ -+ if (m_header != NULL) -+ return *m_header; -+ else -+ return *(m_header = vmime::create
()); -+} -+ -+ -+} // imap -+} // net -+} // vmime -+ -diff -urN a/src/net/imap/IMAPStructure.cpp b/src/net/imap/IMAPStructure.cpp ---- a/src/net/imap/IMAPStructure.cpp 1970-01-01 01:00:00.000000000 +0100 -+++ b/src/net/imap/IMAPStructure.cpp 2010-05-21 09:07:53.363928193 +0200 -@@ -0,0 +1,85 @@ -+// -+// VMime library (http://www.vmime.org) -+// Copyright (C) 2002-2009 Vincent Richard -+// -+// 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 3 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-1301 USA. -+// -+// 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 cover the whole combination. -+// -+ -+#include "vmime/net/imap/IMAPStructure.hpp" -+#include "vmime/net/imap/IMAPPart.hpp" -+ -+ -+namespace vmime { -+namespace net { -+namespace imap { -+ -+ -+IMAPStructure::IMAPStructure() -+{ -+} -+ -+ -+IMAPStructure::IMAPStructure(const IMAPParser::body* body) -+{ -+ m_parts.push_back(IMAPPart::create(NULL, 0, body)); -+} -+ -+ -+IMAPStructure::IMAPStructure(ref parent, const std::vector & list) -+{ -+ int number = 0; -+ -+ for (std::vector ::const_iterator -+ it = list.begin() ; it != list.end() ; ++it, ++number) -+ { -+ m_parts.push_back(IMAPPart::create(parent, number, *it)); -+ } -+} -+ -+ -+ref IMAPStructure::getPartAt(const int x) const -+{ -+ return m_parts[x]; -+} -+ -+ -+ref IMAPStructure::getPartAt(const int x) -+{ -+ return m_parts[x]; -+} -+ -+ -+int IMAPStructure::getPartCount() const -+{ -+ return m_parts.size(); -+} -+ -+ -+// static -+ref IMAPStructure::emptyStructure() -+{ -+ static ref emptyStructure = vmime::create (); -+ return emptyStructure; -+} -+ -+ -+} // imap -+} // net -+} // vmime -+ -diff -urN a/src/net/maildir/maildirMessage.cpp b/src/net/maildir/maildirMessage.cpp ---- a/src/net/maildir/maildirMessage.cpp 2010-05-21 09:06:26.988432541 +0200 -+++ b/src/net/maildir/maildirMessage.cpp 2010-05-21 09:07:53.363928193 +0200 -@@ -524,6 +524,20 @@ - } - - -+ref maildirMessage::getParsedMessage() -+{ -+ std::ostringstream oss; -+ utility::outputStreamAdapter os(oss); -+ -+ extract(os); -+ -+ vmime::ref msg = vmime::create (); -+ msg->parse(oss.str()); -+ -+ return msg; -+} -+ -+ - } // maildir - } // net - } // vmime -diff -urN a/src/net/pop3/POP3Message.cpp b/src/net/pop3/POP3Message.cpp ---- a/src/net/pop3/POP3Message.cpp 2010-05-21 09:06:26.991933216 +0200 -+++ b/src/net/pop3/POP3Message.cpp 2010-05-21 09:07:53.363928193 +0200 -@@ -218,6 +218,20 @@ - } - - -+ref POP3Message::getParsedMessage() -+{ -+ std::ostringstream oss; -+ utility::outputStreamAdapter os(oss); -+ -+ extract(os); -+ -+ vmime::ref msg = vmime::create (); -+ msg->parse(oss.str()); -+ -+ return msg; -+} -+ -+ - } // pop3 - } // net - } // vmime -diff -urN a/src/net/tls/TLSSession.cpp b/src/net/tls/TLSSession.cpp ---- a/src/net/tls/TLSSession.cpp 2010-05-21 09:06:26.999930787 +0200 -+++ b/src/net/tls/TLSSession.cpp 2010-05-21 09:07:53.367948000 +0200 -@@ -27,6 +27,7 @@ - #include "vmime/config.hpp" - - #if VMIME_HAVE_PTHREAD -+# include - # include - # include - #endif // VMIME_HAVE_PTHREAD -diff -urN a/src/security/digest/sha1/sha1MessageDigest.cpp b/src/security/digest/sha1/sha1MessageDigest.cpp ---- a/src/security/digest/sha1/sha1MessageDigest.cpp 2010-05-21 09:06:27.012432100 +0200 -+++ b/src/security/digest/sha1/sha1MessageDigest.cpp 2010-05-21 09:07:53.367948000 +0200 -@@ -135,7 +135,7 @@ - - void sha1MessageDigest::finalize() - { -- unsigned long i, j; -+ unsigned int i, j; - unsigned char finalcount[8]; - - for (i = 0 ; i < 8 ; i++) -@@ -162,8 +162,8 @@ - i = j = 0; - - std::memset(m_buffer, 0, 64); -- std::memset(m_state, 0, 5 * sizeof(unsigned long)); -- std::memset(m_count, 0, 2 * sizeof(unsigned long)); -+ std::memset(m_state, 0, 5 * sizeof(unsigned int)); -+ std::memset(m_count, 0, 2 * sizeof(unsigned int)); - std::memset(&finalcount, 0, 8); - } - -@@ -192,17 +192,17 @@ - * This is the core of the algorithm. - */ - void sha1MessageDigest::transform -- (unsigned long state[5], const unsigned char buffer[64]) -+ (unsigned int state[5], const unsigned char buffer[64]) - { -- unsigned long a, b, c, d, e; -+ unsigned int a, b, c, d, e; - - typedef union - { - unsigned char c[64]; -- unsigned long l[16]; -+ unsigned int l[16]; - } CHAR64LONG16; - -- assert(sizeof(unsigned long) == 4); -+ assert(sizeof(unsigned int) == 4); - - CHAR64LONG16* block; - static unsigned char workspace[64]; -diff -urN a/vmime/bodyPart.hpp b/vmime/bodyPart.hpp ---- a/vmime/bodyPart.hpp 2010-05-21 09:06:27.043934681 +0200 -+++ b/vmime/bodyPart.hpp 2010-05-21 09:07:53.375934467 +0200 -@@ -46,6 +46,7 @@ - public: - - bodyPart(); -+ bodyPart(weak_ref parentPart); - - /** Return the header section of this part. - * -diff -urN a/vmime/contentHandler.hpp b/vmime/contentHandler.hpp ---- a/vmime/contentHandler.hpp 2010-05-21 09:06:27.043934681 +0200 -+++ b/vmime/contentHandler.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -87,7 +87,8 @@ - virtual void extractRaw(utility::outputStream& os, utility::progressListener* progress = NULL) const = 0; - - /** Returns the actual length of data. WARNING: this can return 0 if no -- * length was specified when setting data of this object. -+ * length was specified when setting data of this object, or if the -+ * length is not known). - * - * @return length of data - */ -diff -urN a/vmime/net/imap/IMAPMessage.hpp b/vmime/net/imap/IMAPMessage.hpp ---- a/vmime/net/imap/IMAPMessage.hpp 2010-05-21 09:06:27.060431845 +0200 -+++ b/vmime/net/imap/IMAPMessage.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -28,6 +28,8 @@ - #include "vmime/net/message.hpp" - #include "vmime/net/folder.hpp" - -+#include "vmime/net/imap/IMAPParser.hpp" -+ - - namespace vmime { - namespace net { -@@ -75,12 +77,29 @@ - - void fetchPartHeader(ref p); - -+ ref getParsedMessage(); -+ - private: - - void fetch(ref folder, const int options); - - void processFetchResponse(const int options, const IMAPParser::msg_att* msgAtt); - -+ /** Recursively fetch part header for all parts in the structure. -+ * -+ * @param str structure for which to fetch parts headers -+ */ -+ void fetchPartHeaderForStructure(ref str); -+ -+ /** Recursively contruct parsed message from structure. -+ * Called by getParsedMessage(). -+ * -+ * @param parentPart root body part (the message) -+ * @param str structure for which to construct part -+ * @param level current nesting level (0 is root) -+ */ -+ void constructParsedMessage(ref parentPart, ref str, int level = 0); -+ - void extract(ref p, utility::outputStream& os, utility::progressListener* progress, const int start, const int length, const bool headerOnly, const bool peek) const; - - -diff -urN a/vmime/net/imap/IMAPMessagePartContentHandler.hpp b/vmime/net/imap/IMAPMessagePartContentHandler.hpp ---- a/vmime/net/imap/IMAPMessagePartContentHandler.hpp 1970-01-01 01:00:00.000000000 +0100 -+++ b/vmime/net/imap/IMAPMessagePartContentHandler.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -0,0 +1,73 @@ -+// -+// VMime library (http://www.vmime.org) -+// Copyright (C) 2002-2009 Vincent Richard -+// -+// 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 3 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-1301 USA. -+// -+// 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 cover the whole combination. -+// -+ -+#ifndef VMIME_NET_IMAP_IMAPMESSAGEPARTCONTENTHANDLER_HPP_INCLUDED -+#define VMIME_NET_IMAP_IMAPMESSAGEPARTCONTENTHANDLER_HPP_INCLUDED -+ -+ -+#include "vmime/contentHandler.hpp" -+#include "vmime/net/imap/IMAPMessage.hpp" -+ -+ -+namespace vmime { -+namespace net { -+namespace imap { -+ -+ -+class IMAPMessagePartContentHandler : public contentHandler -+{ -+public: -+ -+ IMAPMessagePartContentHandler(ref msg, ref part, const vmime::encoding& encoding); -+ -+ ref clone() const; -+ -+ void generate(utility::outputStream& os, const vmime::encoding& enc, const string::size_type maxLineLength = lineLengthLimits::infinite) const; -+ -+ void extract(utility::outputStream& os, utility::progressListener* progress = NULL) const; -+ void extractRaw(utility::outputStream& os, utility::progressListener* progress = NULL) const; -+ -+ string::size_type getLength() const; -+ -+ bool isEncoded() const; -+ -+ const vmime::encoding& getEncoding() const; -+ -+ bool isEmpty() const; -+ -+private: -+ -+ weak_ref m_message; -+ weak_ref m_part; -+ -+ vmime::encoding m_encoding; -+}; -+ -+ -+} // imap -+} // net -+} // vmime -+ -+ -+#endif // VMIME_NET_IMAP_IMAPMESSAGEPARTCONTENTHANDLER_HPP_INCLUDED -+ -diff -urN a/vmime/net/imap/IMAPPart.hpp b/vmime/net/imap/IMAPPart.hpp ---- a/vmime/net/imap/IMAPPart.hpp 1970-01-01 01:00:00.000000000 +0100 -+++ b/vmime/net/imap/IMAPPart.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -0,0 +1,88 @@ -+// -+// VMime library (http://www.vmime.org) -+// Copyright (C) 2002-2009 Vincent Richard -+// -+// 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 3 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-1301 USA. -+// -+// 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 cover the whole combination. -+// -+ -+#ifndef VMIME_NET_IMAP_IMAPPART_HPP_INCLUDED -+#define VMIME_NET_IMAP_IMAPPART_HPP_INCLUDED -+ -+ -+#include "vmime/net/message.hpp" -+ -+#include "vmime/net/imap/IMAPParser.hpp" -+ -+ -+namespace vmime { -+namespace net { -+namespace imap { -+ -+ -+class IMAPStructure; -+ -+ -+class IMAPPart : public part -+{ -+private: -+ -+ friend class vmime::creator; -+ -+ IMAPPart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart); -+ IMAPPart(ref parent, const int number, const IMAPParser::body_type_1part* part); -+ -+public: -+ -+ ref getStructure() const; -+ ref getStructure(); -+ -+ ref getParent() const; -+ -+ const mediaType& getType() const; -+ int getSize() const; -+ int getNumber() const; -+ -+ ref getHeader() const; -+ -+ -+ static ref create -+ (ref parent, const int number, const IMAPParser::body* body); -+ -+ -+ header& getOrCreateHeader(); -+ -+private: -+ -+ ref m_structure; -+ weak_ref m_parent; -+ ref
m_header; -+ -+ int m_number; -+ int m_size; -+ mediaType m_mediaType; -+}; -+ -+ -+} // imap -+} // net -+} // vmime -+ -+ -+#endif // VMIME_NET_IMAP_IMAPPART_HPP_INCLUDED -+ -diff -urN a/vmime/net/imap/IMAPStructure.hpp b/vmime/net/imap/IMAPStructure.hpp ---- a/vmime/net/imap/IMAPStructure.hpp 1970-01-01 01:00:00.000000000 +0100 -+++ b/vmime/net/imap/IMAPStructure.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -0,0 +1,67 @@ -+// -+// VMime library (http://www.vmime.org) -+// Copyright (C) 2002-2009 Vincent Richard -+// -+// 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 3 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-1301 USA. -+// -+// 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 cover the whole combination. -+// -+ -+#ifndef VMIME_NET_IMAP_IMAPSTRUCTURE_HPP_INCLUDED -+#define VMIME_NET_IMAP_IMAPSTRUCTURE_HPP_INCLUDED -+ -+ -+#include "vmime/net/message.hpp" -+ -+#include "vmime/net/imap/IMAPParser.hpp" -+ -+ -+namespace vmime { -+namespace net { -+namespace imap { -+ -+ -+class IMAPPart; -+ -+ -+class IMAPStructure : public structure -+{ -+public: -+ -+ IMAPStructure(); -+ IMAPStructure(const IMAPParser::body* body); -+ IMAPStructure(ref parent, const std::vector & list); -+ -+ ref getPartAt(const int x) const; -+ ref getPartAt(const int x); -+ int getPartCount() const; -+ -+ static ref emptyStructure(); -+ -+private: -+ -+ std::vector > m_parts; -+}; -+ -+ -+} // imap -+} // net -+} // vmime -+ -+ -+#endif // VMIME_NET_IMAP_IMAPSTRUCTURE_HPP_INCLUDED -+ -diff -urN a/vmime/net/maildir/maildirMessage.hpp b/vmime/net/maildir/maildirMessage.hpp ---- a/vmime/net/maildir/maildirMessage.hpp 2010-05-21 09:06:27.064432936 +0200 -+++ b/vmime/net/maildir/maildirMessage.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -75,6 +75,8 @@ - - void fetchPartHeader(ref p); - -+ ref getParsedMessage(); -+ - private: - - void fetch(ref folder, const int options); -diff -urN a/vmime/net/message.hpp b/vmime/net/message.hpp ---- a/vmime/net/message.hpp 2010-05-21 09:06:27.067930607 +0200 -+++ b/vmime/net/message.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -31,6 +31,8 @@ - #include "vmime/utility/progressListener.hpp" - #include "vmime/utility/stream.hpp" - -+#include "vmime/message.hpp" -+ - - namespace vmime { - namespace net { -@@ -286,6 +288,16 @@ - * @param p the part for which to fetch the header - */ - virtual void fetchPartHeader(ref p) = 0; -+ -+ /** Get the RFC-822 message for this abstract message. -+ * Warning: This may require getting some data (ie: structure and headers) from -+ * the server, which is done automatically. Actual message contents (ie: body) -+ * will not be fetched if possible (IMAP allows it, whereas POP3 will require -+ * to fetch the whole message). -+ * -+ * @return a RFC-822-parsed message -+ */ -+ virtual ref getParsedMessage() = 0; - }; - - -diff -urN a/vmime/net/pop3/POP3Message.hpp b/vmime/net/pop3/POP3Message.hpp ---- a/vmime/net/pop3/POP3Message.hpp 2010-05-21 09:06:27.067930607 +0200 -+++ b/vmime/net/pop3/POP3Message.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -77,6 +77,8 @@ - - void fetchPartHeader(ref p); - -+ ref getParsedMessage(); -+ - private: - - void fetch(ref folder, const int options); -diff -urN a/vmime/security/digest/sha1/sha1MessageDigest.hpp b/vmime/security/digest/sha1/sha1MessageDigest.hpp ---- a/vmime/security/digest/sha1/sha1MessageDigest.hpp 2010-05-21 09:06:27.088435636 +0200 -+++ b/vmime/security/digest/sha1/sha1MessageDigest.hpp 2010-05-21 09:07:53.371933656 +0200 -@@ -59,10 +59,10 @@ - - void init(); - -- static void transform(unsigned long state[5], const byte_t buffer[64]); -+ static void transform(unsigned int state[5], const byte_t buffer[64]); - -- unsigned long m_state[5]; -- unsigned long m_count[2]; -+ unsigned int m_state[5]; -+ unsigned int m_count[2]; - byte_t m_buffer[64]; - - byte_t m_digest[20]; diff --git a/src/vmime-0.9.1-svn-r553-20100521.patch b/src/vmime-0.9.1-svn-r553-20100521.patch deleted file mode 100644 index 7696ffe..0000000 --- a/src/vmime-0.9.1-svn-r553-20100521.patch +++ /dev/null @@ -1,280 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/src/utility/stringUtils.cpp b/src/utility/stringUtils.cpp ---- a/src/utility/stringUtils.cpp 2010-05-22 13:23:38.947821913 +0200 -+++ b/src/utility/stringUtils.cpp 2010-05-22 13:24:17.295331088 +0200 -@@ -151,6 +151,24 @@ - } - - -+string::size_type stringUtils::findFirstNonASCIIchar -+ (const string::const_iterator begin, const string::const_iterator end) -+{ -+ string::size_type pos = string::npos; -+ -+ for (string::const_iterator i = begin ; i != end ; ++i) -+ { -+ if (!parserHelpers::isAscii(*i)) -+ { -+ pos = i - begin; -+ break; -+ } -+ } -+ -+ return pos; -+} -+ -+ - const string stringUtils::unquote(const string& str) - { - if (str.length() < 2) -diff -urN a/src/word.cpp b/src/word.cpp ---- a/src/word.cpp 2010-05-22 13:23:38.947821913 +0200 -+++ b/src/word.cpp 2010-05-22 13:24:17.263325063 +0200 -@@ -336,30 +336,22 @@ - if (state == NULL) - state = &defaultGeneratorState; - -- // Calculate the number of ASCII chars to check whether encoding is needed -- // and _which_ encoding to use. -- const string::size_type asciiCount = -- utility::stringUtils::countASCIIchars(m_buffer.begin(), m_buffer.end()); -+ // Find out if encoding is forced or required by contents + charset -+ bool encodingNeeded = (flags & text::FORCE_ENCODING) != 0; - -- bool noEncoding = (flags & text::FORCE_NO_ENCODING) || -- (!(flags & text::FORCE_ENCODING) && asciiCount == m_buffer.length()); -- -- if (!(flags & text::FORCE_NO_ENCODING) && -- m_buffer.find_first_of("\n\r") != string::npos) -- { -- // Force encoding when there are only ASCII chars, but there is -- // also at least one of '\n' or '\r' (header fields) -- noEncoding = false; -- } -+ if (encodingNeeded == false) -+ encodingNeeded = wordEncoder::isEncodingNeeded(m_buffer, m_charset); -+ else if ((flags & text::FORCE_NO_ENCODING) != 0) -+ encodingNeeded = false; - - // If possible and requested (with flag), quote the buffer (no folding is performed). - // Quoting is possible if and only if: -- // - the whole buffer is ASCII-only -+ // - the buffer does not need to be encoded - // - the buffer does not contain quoting character (") - // - there is enough remaining space on the current line to hold the whole buffer -- if (!noEncoding && -+ if (!encodingNeeded && - (flags & text::QUOTE_IF_POSSIBLE) && -- asciiCount == m_buffer.length() && -+ !encodingNeeded && - m_buffer.find('"') == string::npos && - (curLineLength + 2 /* 2 x " */ + m_buffer.length()) < maxLineLength) - { -@@ -367,7 +359,7 @@ - curLineLength += 2 + m_buffer.length(); - } - // We will fold lines without encoding them. -- else if (noEncoding) -+ else if (!encodingNeeded) - { - string::const_iterator lastWSpos = m_buffer.end(); // last white-space position - string::const_iterator curLineStart = m_buffer.begin(); // current line start -diff -urN a/src/wordEncoder.cpp b/src/wordEncoder.cpp ---- a/src/wordEncoder.cpp 2010-05-22 13:23:38.947821913 +0200 -+++ b/src/wordEncoder.cpp 2010-05-22 13:24:17.263325063 +0200 -@@ -260,17 +260,75 @@ - } - - -+// Explicitly force encoding for some charsets -+struct CharsetEncodingEntry -+{ -+ CharsetEncodingEntry(const std::string& charset_, const wordEncoder::Encoding encoding_) -+ : charset(charset_), encoding(encoding_) -+ { -+ } -+ -+ std::string charset; -+ wordEncoder::Encoding encoding; -+}; -+ -+CharsetEncodingEntry g_charsetEncodingMap[] = -+{ -+ // Use QP encoding for ISO-8859-x charsets -+ CharsetEncodingEntry("iso-8859", wordEncoder::ENCODING_QP), -+ CharsetEncodingEntry("iso8859", wordEncoder::ENCODING_QP), -+ -+ // RFC-1468 states: -+ // " ISO-2022-JP may also be used in MIME Part 2 headers. The "B" -+ // encoding should be used with ISO-2022-JP text. " -+ // Use Base64 encoding for all ISO-2022 charsets. -+ CharsetEncodingEntry("iso-2022", wordEncoder::ENCODING_B64), -+ CharsetEncodingEntry("iso2022", wordEncoder::ENCODING_B64), -+ -+ // Last entry is not used -+ CharsetEncodingEntry("", wordEncoder::ENCODING_AUTO) -+}; -+ -+ -+// static -+bool wordEncoder::isEncodingNeeded(const string& buffer, const charset& charset) -+{ -+ // Special treatment for some charsets -+ const string cset = utility::stringUtils::toLower(charset.getName()); -+ -+ for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) -+ { -+ if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) -+ { -+ if (g_charsetEncodingMap[i].encoding != wordEncoder::ENCODING_AUTO) -+ return true; -+ } -+ } -+ -+ // No encoding is needed if the buffer only contains ASCII chars -+ if (utility::stringUtils::findFirstNonASCIIchar(buffer.begin(), buffer.end()) != string::npos) -+ return true; -+ -+ // Force encoding when there are only ASCII chars, but there is -+ // also at least one of '\n' or '\r' (header fields) -+ if (buffer.find_first_of("\n\r") != string::npos) -+ return true; -+ -+ return false; -+} -+ -+ - // static - wordEncoder::Encoding wordEncoder::guessBestEncoding - (const string& buffer, const charset& charset) - { -- // If the charset is ISO-8859-x, set to QP encoding -+ // Special treatment for some charsets - const string cset = utility::stringUtils::toLower(charset.getName()); - -- if (cset.find("iso-8859") != string::npos || -- cset.find("iso8859") != string::npos) -+ for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) - { -- return ENCODING_QP; -+ if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) -+ return g_charsetEncodingMap[i].encoding; - } - - // Use Base64 if more than 40% non-ASCII, or Quoted-Printable else (default) -diff -urN a/tests/parser/textTest.cpp b/tests/parser/textTest.cpp ---- a/tests/parser/textTest.cpp 2010-05-22 13:23:38.955319215 +0200 -+++ b/tests/parser/textTest.cpp 2010-05-22 13:24:17.295331088 +0200 -@@ -44,6 +44,8 @@ - VMIME_TEST(testWordGenerateSpace) - VMIME_TEST(testWordGenerateSpace2) - VMIME_TEST(testWordGenerateMultiBytes) -+ VMIME_TEST(testWordGenerateQuote) -+ VMIME_TEST(testWordGenerateSpecialCharsets) - VMIME_TEST_LIST_END - - -@@ -335,9 +337,38 @@ - VASSERT_EQ("1", "=?utf-8?Q?aaa?==?utf-8?Q?=C3=A9?==?utf-8?Q?zzz?=", - cleanGeneratedWords(vmime::word("aaa\xc3\xa9zzz", vmime::charset("utf-8")).generate(16))); - -- VASSERT_EQ("1", "=?utf-8?Q?aaa=C3=A9?==?utf-8?Q?zzz?=", -+ VASSERT_EQ("2", "=?utf-8?Q?aaa=C3=A9?==?utf-8?Q?zzz?=", - cleanGeneratedWords(vmime::word("aaa\xc3\xa9zzz", vmime::charset("utf-8")).generate(17))); - } - -+ void testWordGenerateQuote() -+ { -+ std::string str; -+ vmime::utility::outputStreamStringAdapter os(str); -+ -+ // ASCII-only text is quotable -+ str.clear(); -+ vmime::word("Quoted text").generate(os, 1000, 0, NULL, vmime::text::QUOTE_IF_POSSIBLE, NULL); -+ VASSERT_EQ("1", "\"Quoted text\"", cleanGeneratedWords(str)); -+ -+ // Text with CR/LF is not quotable -+ str.clear(); -+ vmime::word("Non-quotable\ntext", "us-ascii").generate(os, 1000, 0, NULL, vmime::text::QUOTE_IF_POSSIBLE, NULL); -+ VASSERT_EQ("2", "=?us-ascii?Q?Non-quotable=0Atext?=", cleanGeneratedWords(str)); -+ -+ // Text with non-ASCII chars is not quotable -+ str.clear(); -+ vmime::word("Non-quotable text \xc3\xa9").generate(os, 1000, 0, NULL, vmime::text::QUOTE_IF_POSSIBLE, NULL); -+ VASSERT_EQ("3", "=?UTF-8?Q?Non-quotable_text_=C3=A9?=", cleanGeneratedWords(str)); -+ } -+ -+ void testWordGenerateSpecialCharsets() -+ { -+ // ISO-2022-JP only uses 7-bit chars but should be encoded in Base64 -+ VASSERT_EQ("1", "=?iso-2022-jp?B?XlskQiVRITwlPSVKJWshJiU9JVUlSCUmJSclIl5bKEI=?=", -+ cleanGeneratedWords(vmime::word("^[$B%Q!<%=%J%k!&%=%U%H%&%'%\"^[(B", -+ vmime::charset("iso-2022-jp")).generate(100))); -+ } -+ - VMIME_TEST_SUITE_END - -diff -urN a/vmime/component.hpp b/vmime/component.hpp ---- a/vmime/component.hpp 2010-05-22 13:23:38.967821097 +0200 -+++ b/vmime/component.hpp 2010-05-22 13:24:17.295331088 +0200 -@@ -32,8 +32,8 @@ - { - - --/** This abstract class is the base for all the classes in the library. -- * It defines the methods for parsing and generating all the components. -+/** This abstract class is the base class for all the components of a message. -+ * It defines methods for parsing and generating a component. - */ - - class component : public object -diff -urN a/vmime/utility/stringUtils.hpp b/vmime/utility/stringUtils.hpp ---- a/vmime/utility/stringUtils.hpp 2010-05-22 13:23:39.023322447 +0200 -+++ b/vmime/utility/stringUtils.hpp 2010-05-22 13:24:17.295331088 +0200 -@@ -104,6 +104,14 @@ - */ - static string::size_type countASCIIchars(const string::const_iterator begin, const string::const_iterator end); - -+ /** Returns the position of the first non 7-bit US-ASCII character in a string. -+ * -+ * @param begin start position -+ * @param end end position -+ * @return position since begin, or string::npos -+ */ -+ static string::size_type findFirstNonASCIIchar(const string::const_iterator begin, const string::const_iterator end); -+ - /** Convert the specified value to a string value. - * - * @param value to convert -diff -urN a/vmime/wordEncoder.hpp b/vmime/wordEncoder.hpp ---- a/vmime/wordEncoder.hpp 2010-05-22 13:23:39.027319211 +0200 -+++ b/vmime/wordEncoder.hpp 2010-05-22 13:24:17.295331088 +0200 -@@ -73,12 +73,23 @@ - */ - Encoding getEncoding() const; - --private: -+ /** Test whether RFC-2047 encoding is needed. -+ * -+ * @param buffer buffer to analyze -+ * @param charset charset of the buffer -+ * @return true if encoding is needed, false otherwise. -+ */ -+ static bool isEncodingNeeded(const string& buffer, const charset& charset); - -+ /** Guess the best RFC-2047 encoding to use for the specified buffer. -+ * -+ * @param buffer buffer to analyze -+ * @param charset charset of the buffer -+ * @return RFC-2047 encoding -+ */ - static Encoding guessBestEncoding(const string& buffer, const charset& charset); - -- void guessBestEncoding(); -- -+private: - - string m_buffer; - string::size_type m_pos; diff --git a/src/vmime-0.9.1-svn-r555-20100523.patch b/src/vmime-0.9.1-svn-r555-20100523.patch deleted file mode 100644 index 446740c..0000000 --- a/src/vmime-0.9.1-svn-r555-20100523.patch +++ /dev/null @@ -1,721 +0,0 @@ -This file is part of mingw-cross-env. -See doc/index.html for further information. - -diff -urN a/examples/example3.cpp b/examples/example3.cpp ---- a/examples/example3.cpp 2010-05-24 10:54:47.983682375 +0200 -+++ b/examples/example3.cpp 2010-05-24 10:55:53.035683414 +0200 -@@ -73,7 +73,7 @@ - - // -- embed an image (the returned "CID" (content identifier) is used to reference - // -- the image into HTML content). -- vmime::utility::fileSystemFactory* fs = -+ vmime::ref fs = - vmime::platform::getHandler()->getFileSystemFactory(); - - vmime::ref imageFile = -diff -urN a/src/body.cpp b/src/body.cpp ---- a/src/body.cpp 2010-05-24 10:54:48.003683032 +0200 -+++ b/src/body.cpp 2010-05-24 10:55:53.031689093 +0200 -@@ -213,8 +213,26 @@ - // Treat the contents as 'simple' data - else - { -+ encoding enc; -+ -+ try -+ { -+ const ref cef = -+ m_header.acquire()->findField(fields::CONTENT_TRANSFER_ENCODING); -+ -+ enc = *cef->getValue().dynamicCast (); -+ } -+ catch (exceptions::no_such_field&) -+ { -+ // Defaults to "7bit" (RFC-1521) -+ enc = vmime::encoding(encodingTypes::SEVEN_BIT); -+ -+ // Set header field -+ m_header.acquire()->ContentTransferEncoding()->setValue(enc); -+ } -+ - // Extract the (encoded) contents -- m_contents = vmime::create (buffer, position, end, getEncoding()); -+ m_contents = vmime::create (buffer, position, end, enc); - } - - setParsedBounds(position, end); -@@ -406,6 +424,22 @@ - // Quick-access functions - // - -+ -+void body::setContentType(const mediaType& type, const charset& chset) -+{ -+ ref ctf = m_header.acquire()->ContentType().dynamicCast (); -+ -+ ctf->setValue(type); -+ ctf->setCharset(chset); -+} -+ -+ -+void body::setContentType(const mediaType& type) -+{ -+ m_header.acquire()->ContentType()->setValue(type); -+} -+ -+ - const mediaType body::getContentType() const - { - try -@@ -423,6 +457,25 @@ - } - - -+void body::setCharset(const charset& chset) -+{ -+ // If a Content-Type field exists, set charset -+ try -+ { -+ ref ctf = -+ m_header.acquire()->findField(fields::CONTENT_TYPE).dynamicCast (); -+ -+ ctf->setCharset(chset); -+ } -+ // Else, create a new Content-Type field of default type "text/plain" -+ // and set charset on it -+ catch (exceptions::no_such_field&) -+ { -+ setContentType(mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN), chset); -+ } -+} -+ -+ - const charset body::getCharset() const - { - try -@@ -445,6 +498,12 @@ - } - - -+void body::setEncoding(const encoding& enc) -+{ -+ m_header.acquire()->ContentTransferEncoding()->setValue(enc); -+} -+ -+ - const encoding body::getEncoding() const - { - try -@@ -456,8 +515,15 @@ - } - catch (exceptions::no_such_field&) - { -- // Defaults to "7bit" (RFC-1521) -- return (vmime::encoding(encodingTypes::SEVEN_BIT)); -+ if (m_contents->isEncoded()) -+ { -+ return m_contents->getEncoding(); -+ } -+ else -+ { -+ // Defaults to "7bit" (RFC-1521) -+ return vmime::encoding(encodingTypes::SEVEN_BIT); -+ } - } - } - -@@ -551,6 +617,32 @@ - } - - -+void body::setContents(ref contents, const mediaType& type) -+{ -+ m_contents = contents; -+ -+ setContentType(type); -+} -+ -+ -+void body::setContents(ref contents, const mediaType& type, const charset& chset) -+{ -+ m_contents = contents; -+ -+ setContentType(type, chset); -+} -+ -+ -+void body::setContents(ref contents, const mediaType& type, -+ const charset& chset, const encoding& enc) -+{ -+ m_contents = contents; -+ -+ setContentType(type, chset); -+ setEncoding(enc); -+} -+ -+ - void body::initNewPart(ref part) - { - part->m_parent = m_part; -diff -urN a/src/charset.cpp b/src/charset.cpp ---- a/src/charset.cpp 2010-05-24 10:54:48.003683032 +0200 -+++ b/src/charset.cpp 2010-05-24 10:55:53.031689093 +0200 -@@ -24,6 +24,7 @@ - #include "vmime/charset.hpp" - #include "vmime/exception.hpp" - #include "vmime/platform.hpp" -+#include "vmime/encoding.hpp" - - #include "vmime/utility/stringUtils.hpp" - -@@ -140,4 +141,53 @@ - } - - -+ -+// Explicitly force encoding for some charsets -+struct CharsetEncodingEntry -+{ -+ CharsetEncodingEntry(const string& charset_, const string& encoding_) -+ : charset(charset_), encoding(encoding_) -+ { -+ } -+ -+ const string charset; -+ const string encoding; -+}; -+ -+CharsetEncodingEntry g_charsetEncodingMap[] = -+{ -+ // Use QP encoding for ISO-8859-x charsets -+ CharsetEncodingEntry("iso-8859", encodingTypes::QUOTED_PRINTABLE), -+ CharsetEncodingEntry("iso8859", encodingTypes::QUOTED_PRINTABLE), -+ -+ // RFC-1468 states: -+ // " ISO-2022-JP may also be used in MIME Part 2 headers. The "B" -+ // encoding should be used with ISO-2022-JP text. " -+ // Use Base64 encoding for all ISO-2022 charsets. -+ CharsetEncodingEntry("iso-2022", encodingTypes::BASE64), -+ CharsetEncodingEntry("iso2022", encodingTypes::BASE64), -+ -+ // Last entry is not used -+ CharsetEncodingEntry("", "") -+}; -+ -+ -+bool charset::getRecommendedEncoding(encoding& enc) const -+{ -+ // Special treatment for some charsets -+ const string cset = utility::stringUtils::toLower(getName()); -+ -+ for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) -+ { -+ if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) -+ { -+ enc = g_charsetEncodingMap[i].encoding; -+ return true; -+ } -+ } -+ -+ return false; -+} -+ -+ - } // vmime -diff -urN a/src/emptyContentHandler.cpp b/src/emptyContentHandler.cpp ---- a/src/emptyContentHandler.cpp 2010-05-24 10:54:48.007697118 +0200 -+++ b/src/emptyContentHandler.cpp 2010-05-24 10:55:53.031689093 +0200 -@@ -96,4 +96,10 @@ - } - - -+bool emptyContentHandler::isBuffered() const -+{ -+ return true; -+} -+ -+ - } // vmime -diff -urN a/src/encoding.cpp b/src/encoding.cpp ---- a/src/encoding.cpp 2010-05-24 10:54:48.007697118 +0200 -+++ b/src/encoding.cpp 2010-05-24 10:55:53.031689093 +0200 -@@ -110,7 +110,7 @@ - } - - --const encoding encoding::decide -+const encoding encoding::decideImpl - (const string::const_iterator begin, const string::const_iterator end) - { - const string::difference_type length = end - begin; -@@ -164,10 +164,40 @@ - } - - --const encoding encoding::decide(ref /* data */) -+const encoding encoding::decide -+ (ref data, const EncodingUsage usage) - { -- // TODO: a better solution to do that? -- return (encoding(encodingTypes::BASE64)); -+ if (usage == USAGE_TEXT && data->isBuffered() && -+ data->getLength() > 0 && data->getLength() < 32768) -+ { -+ // Extract data into temporary buffer -+ string buffer; -+ utility::outputStreamStringAdapter os(buffer); -+ -+ data->extract(os); -+ os.flush(); -+ -+ return decideImpl(buffer.begin(), buffer.end()); -+ } -+ else -+ { -+ return encoding(encodingTypes::BASE64); -+ } -+} -+ -+ -+const encoding encoding::decide(ref data, -+ const charset& chset, const EncodingUsage usage) -+{ -+ if (usage == USAGE_TEXT) -+ { -+ encoding recEncoding; -+ -+ if (chset.getRecommendedEncoding(recEncoding)) -+ return recEncoding; -+ } -+ -+ return decide(data, usage); - } - - -diff -urN a/src/htmlTextPart.cpp b/src/htmlTextPart.cpp ---- a/src/htmlTextPart.cpp 2010-05-24 10:54:48.011682988 +0200 -+++ b/src/htmlTextPart.cpp 2010-05-24 10:55:53.027697497 +0200 -@@ -69,27 +69,20 @@ - ref part = vmime::create (); - parent->getBody()->appendPart(part); - -- // -- Set header fields -- part->getHeader()->ContentType()->setValue -- (mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN)); -- part->getHeader()->ContentType().dynamicCast ()->setCharset(m_charset); -- part->getHeader()->ContentTransferEncoding()->setValue(encoding(encodingTypes::QUOTED_PRINTABLE)); -- - // -- Set contents -- part->getBody()->setContents(m_plainText); -+ part->getBody()->setContents(m_plainText, -+ mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN), m_charset, -+ encoding::decide(m_plainText, m_charset, encoding::USAGE_TEXT)); - } - - // HTML text - // -- Create a new part - ref htmlPart = vmime::create (); - -- // -- Set header fields -- htmlPart->getHeader()->ContentType()->setValue(mediaType(mediaTypes::TEXT, mediaTypes::TEXT_HTML)); -- htmlPart->getHeader()->ContentType().dynamicCast ()->setCharset(m_charset); -- htmlPart->getHeader()->ContentTransferEncoding()->setValue(encoding(encodingTypes::QUOTED_PRINTABLE)); -- - // -- Set contents -- htmlPart->getBody()->setContents(m_text); -+ htmlPart->getBody()->setContents(m_text, -+ mediaType(mediaTypes::TEXT, mediaTypes::TEXT_HTML), m_charset, -+ encoding::decide(m_text, m_charset, encoding::USAGE_TEXT)); - - // Handle the case we have embedded objects - if (!m_objects.empty()) -diff -urN a/src/net/imap/IMAPMessagePartContentHandler.cpp b/src/net/imap/IMAPMessagePartContentHandler.cpp ---- a/src/net/imap/IMAPMessagePartContentHandler.cpp 2010-05-24 10:54:48.167694191 +0200 -+++ b/src/net/imap/IMAPMessagePartContentHandler.cpp 2010-05-24 10:55:53.031689093 +0200 -@@ -173,6 +173,12 @@ - } - - -+bool IMAPMessagePartContentHandler::isBuffered() const -+{ -+ return true; -+} -+ -+ - } // imap - } // net - } // vmime -diff -urN a/src/plainTextPart.cpp b/src/plainTextPart.cpp ---- a/src/plainTextPart.cpp 2010-05-24 10:54:48.039690584 +0200 -+++ b/src/plainTextPart.cpp 2010-05-24 10:55:53.031689093 +0200 -@@ -63,13 +63,10 @@ - ref part = vmime::create (); - parent->getBody()->appendPart(part); - -- // Set header fields -- part->getHeader()->ContentType()->setValue(mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN)); -- part->getHeader()->ContentType().dynamicCast ()->setCharset(m_charset); -- part->getHeader()->ContentTransferEncoding()->setValue(encoding(encodingTypes::QUOTED_PRINTABLE)); -- - // Set contents -- part->getBody()->setContents(m_text); -+ part->getBody()->setContents(m_text, -+ mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN), m_charset, -+ encoding::decide(m_text, m_charset, encoding::USAGE_TEXT)); - } - - -diff -urN a/src/streamContentHandler.cpp b/src/streamContentHandler.cpp ---- a/src/streamContentHandler.cpp 2010-05-24 10:54:48.051685838 +0200 -+++ b/src/streamContentHandler.cpp 2010-05-24 10:55:53.027697497 +0200 -@@ -201,4 +201,11 @@ - } - - -+bool streamContentHandler::isBuffered() const -+{ -+ // FIXME: some streams can be resetted -+ return false; -+} -+ -+ - } // vmime -diff -urN a/src/stringContentHandler.cpp b/src/stringContentHandler.cpp ---- a/src/stringContentHandler.cpp 2010-05-24 10:54:48.051685838 +0200 -+++ b/src/stringContentHandler.cpp 2010-05-24 10:55:53.027697497 +0200 -@@ -202,4 +202,10 @@ - } - - -+bool stringContentHandler::isBuffered() const -+{ -+ return true; -+} -+ -+ - } // vmime -diff -urN a/src/wordEncoder.cpp b/src/wordEncoder.cpp ---- a/src/wordEncoder.cpp 2010-05-24 10:54:48.175690024 +0200 -+++ b/src/wordEncoder.cpp 2010-05-24 10:55:53.027697497 +0200 -@@ -26,6 +26,8 @@ - #include "vmime/exception.hpp" - #include "vmime/charsetConverter.hpp" - -+#include "vmime/encoding.hpp" -+ - #include "vmime/utility/encoder/b64Encoder.hpp" - #include "vmime/utility/encoder/qpEncoder.hpp" - -@@ -260,50 +262,14 @@ - } - - --// Explicitly force encoding for some charsets --struct CharsetEncodingEntry --{ -- CharsetEncodingEntry(const std::string& charset_, const wordEncoder::Encoding encoding_) -- : charset(charset_), encoding(encoding_) -- { -- } -- -- std::string charset; -- wordEncoder::Encoding encoding; --}; -- --CharsetEncodingEntry g_charsetEncodingMap[] = --{ -- // Use QP encoding for ISO-8859-x charsets -- CharsetEncodingEntry("iso-8859", wordEncoder::ENCODING_QP), -- CharsetEncodingEntry("iso8859", wordEncoder::ENCODING_QP), -- -- // RFC-1468 states: -- // " ISO-2022-JP may also be used in MIME Part 2 headers. The "B" -- // encoding should be used with ISO-2022-JP text. " -- // Use Base64 encoding for all ISO-2022 charsets. -- CharsetEncodingEntry("iso-2022", wordEncoder::ENCODING_B64), -- CharsetEncodingEntry("iso2022", wordEncoder::ENCODING_B64), -- -- // Last entry is not used -- CharsetEncodingEntry("", wordEncoder::ENCODING_AUTO) --}; -- -- - // static - bool wordEncoder::isEncodingNeeded(const string& buffer, const charset& charset) - { -- // Special treatment for some charsets -- const string cset = utility::stringUtils::toLower(charset.getName()); -+ // Charset-specific encoding -+ encoding recEncoding; - -- for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) -- { -- if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) -- { -- if (g_charsetEncodingMap[i].encoding != wordEncoder::ENCODING_AUTO) -- return true; -- } -- } -+ if (charset.getRecommendedEncoding(recEncoding)) -+ return true; - - // No encoding is needed if the buffer only contains ASCII chars - if (utility::stringUtils::findFirstNonASCIIchar(buffer.begin(), buffer.end()) != string::npos) -@@ -322,13 +288,15 @@ - wordEncoder::Encoding wordEncoder::guessBestEncoding - (const string& buffer, const charset& charset) - { -- // Special treatment for some charsets -- const string cset = utility::stringUtils::toLower(charset.getName()); -+ // Charset-specific encoding -+ encoding recEncoding; - -- for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) -+ if (charset.getRecommendedEncoding(recEncoding)) - { -- if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) -- return g_charsetEncodingMap[i].encoding; -+ if (recEncoding == encoding(encodingTypes::QUOTED_PRINTABLE)) -+ return ENCODING_QP; -+ else -+ return ENCODING_B64; - } - - // Use Base64 if more than 40% non-ASCII, or Quoted-Printable else (default) -diff -urN a/vmime/body.hpp b/vmime/body.hpp ---- a/vmime/body.hpp 2010-05-24 10:54:48.079694131 +0200 -+++ b/vmime/body.hpp 2010-05-24 10:55:53.035683414 +0200 -@@ -184,6 +184,45 @@ - */ - void setContents(ref contents); - -+ /** Set the body contents and type. -+ * -+ * @param contents new body contents -+ * @param type type of contents -+ */ -+ void setContents(ref contents, const mediaType& type); -+ -+ /** Set the body contents, type and charset. -+ * -+ * @param contents new body contents -+ * @param type type of contents -+ * @param charset charset of contents -+ */ -+ void setContents(ref contents, const mediaType& type, const charset& chset); -+ -+ /** Set the body contents, type, charset and encoding. -+ * -+ * @param contents new body contents -+ * @param type type of contents -+ * @param charset charset of contents -+ * @param encoding contents encoding -+ */ -+ void setContents(ref contents, const mediaType& type, -+ const charset& chset, const encoding& enc); -+ -+ /** Set the MIME type and charset of contents. -+ * If a charset is defined, it will not be modified. -+ * -+ * @param type MIME media type of contents -+ * @param chset charset of contents -+ */ -+ void setContentType(const mediaType& type, const charset& chset); -+ -+ /** Set the MIME type of contents. -+ * -+ * @param type MIME media type of contents -+ */ -+ void setContentType(const mediaType& type); -+ - /** Return the media type of the data contained in the body contents. - * This is a shortcut for getHeader()->ContentType()->getValue() - * on the parent part. -@@ -192,6 +231,13 @@ - */ - const mediaType getContentType() const; - -+ /** Set the charset of contents. -+ * If the type is not set, it will be set to default "text/plain" type. -+ * -+ * @param chset charset of contents -+ */ -+ void setCharset(const charset& chset); -+ - /** Return the charset of the data contained in the body contents. - * This is a shortcut for getHeader()->ContentType()->getCharset() - * on the parent part. -@@ -200,6 +246,13 @@ - */ - const charset getCharset() const; - -+ /** Set the output encoding of contents. -+ * Contents will be encoded (or re-encoded) when this node is being generated. -+ * -+ * @param enc encoding of contents -+ */ -+ void setEncoding(const encoding& enc); -+ - /** Return the encoding used to encode the body contents. - * This is a shortcut for getHeader()->ContentTransferEncoding()->getValue() - * on the parent part. -diff -urN a/vmime/charset.hpp b/vmime/charset.hpp ---- a/vmime/charset.hpp 2010-05-24 10:54:48.079694131 +0200 -+++ b/vmime/charset.hpp 2010-05-24 10:55:53.031689093 +0200 -@@ -33,6 +33,9 @@ - { - - -+class encoding; // forward reference -+ -+ - /** Charset description (basic type). - */ - -@@ -59,6 +62,16 @@ - - const std::vector > getChildComponents() const; - -+ /** Gets the recommended encoding for this charset. -+ * Note: there may be no recommended encoding. -+ * -+ * @param enc output parameter that will hold recommended encoding -+ * @return true if an encoding is recommended (the encoding is stored -+ * in the enc parameter), false otherwise (in this case, the enc -+ * parameter is not modified) -+ */ -+ bool getRecommendedEncoding(encoding& enc) const; -+ - /** Returns the default charset used on the system. - * - * This function simply calls platformHandler::getLocaleCharset() -diff -urN a/vmime/contentHandler.hpp b/vmime/contentHandler.hpp ---- a/vmime/contentHandler.hpp 2010-05-24 10:54:48.171682994 +0200 -+++ b/vmime/contentHandler.hpp 2010-05-24 10:55:53.035683414 +0200 -@@ -111,6 +111,13 @@ - * @return true if no data is managed by this object, false otherwise - */ - virtual bool isEmpty() const = 0; -+ -+ /** Indicates whether the extract() method can be called multiple times. -+ * -+ * @return true if the data can be extracted multiple times, or false -+ * if not (ie. streamed data from socket) -+ */ -+ virtual bool isBuffered() const = 0; - }; - - -diff -urN a/vmime/emptyContentHandler.hpp b/vmime/emptyContentHandler.hpp ---- a/vmime/emptyContentHandler.hpp 2010-05-24 10:54:48.083683563 +0200 -+++ b/vmime/emptyContentHandler.hpp 2010-05-24 10:55:53.031689093 +0200 -@@ -52,6 +52,8 @@ - const vmime::encoding& getEncoding() const; - - bool isEmpty() const; -+ -+ bool isBuffered() const; - }; - - -diff -urN a/vmime/encoding.hpp b/vmime/encoding.hpp ---- a/vmime/encoding.hpp 2010-05-24 10:54:48.083683563 +0200 -+++ b/vmime/encoding.hpp 2010-05-24 10:55:53.031689093 +0200 -@@ -45,6 +45,13 @@ - { - public: - -+ enum EncodingUsage -+ { -+ USAGE_TEXT, /**< Use for body text. */ -+ USAGE_BINARY_DATA /**< Use for attachment, image... */ -+ }; -+ -+ - encoding(); - explicit encoding(const string& name); - encoding(const encoding& enc); -@@ -75,20 +82,21 @@ - - /** Decide which encoding to use based on the specified data. - * -- * \deprecated Use the new decide() method which takes a contentHandler parameter. -- * -- * @param begin start iterator in buffer -- * @param end end iterator in buffer -+ * @param data data used to determine encoding -+ * @param usage context of use of data - * @return suitable encoding for specified data - */ -- static const encoding decide(const string::const_iterator begin, const string::const_iterator end); -+ static const encoding decide(ref data, const EncodingUsage usage = USAGE_BINARY_DATA); - -- /** Decide which encoding to use based on the specified data. -+ /** Decide which encoding to use based on the specified data and charset. - * - * @param data data used to determine encoding -- * @return suitable encoding for specified data -+ * @param charset charset of data -+ * @param usage context of use of data -+ * @return suitable encoding for specified data and charset - */ -- static const encoding decide(ref data); -+ static const encoding decide(ref data, const charset& chset, const EncodingUsage usage = USAGE_BINARY_DATA); -+ - - ref clone() const; - void copyFrom(const component& other); -@@ -106,6 +114,17 @@ - - string m_name; - -+ /** Decide which encoding to use based on the specified data. -+ * -+ * Please note: this will read the whole buffer, so it should be used only -+ * for small amount of data (eg. text), and not large binary attachments. -+ * -+ * @param begin start iterator in buffer -+ * @param end end iterator in buffer -+ * @return suitable encoding for specified data -+ */ -+ static const encoding decideImpl(const string::const_iterator begin, const string::const_iterator end); -+ - public: - - using component::parse; -diff -urN a/vmime/net/imap/IMAPMessagePartContentHandler.hpp b/vmime/net/imap/IMAPMessagePartContentHandler.hpp ---- a/vmime/net/imap/IMAPMessagePartContentHandler.hpp 2010-05-24 10:54:48.171682994 +0200 -+++ b/vmime/net/imap/IMAPMessagePartContentHandler.hpp 2010-05-24 10:55:53.035683414 +0200 -@@ -55,6 +55,8 @@ - - bool isEmpty() const; - -+ bool isBuffered() const; -+ - private: - - weak_ref m_message; -diff -urN a/vmime/streamContentHandler.hpp b/vmime/streamContentHandler.hpp ---- a/vmime/streamContentHandler.hpp 2010-05-24 10:54:48.135692627 +0200 -+++ b/vmime/streamContentHandler.hpp 2010-05-24 10:55:53.035683414 +0200 -@@ -62,6 +62,8 @@ - - bool isEmpty() const; - -+ bool isBuffered() const; -+ - private: - - // Equals to NO_ENCODING if data is not encoded, otherwise this -diff -urN a/vmime/stringContentHandler.hpp b/vmime/stringContentHandler.hpp ---- a/vmime/stringContentHandler.hpp 2010-05-24 10:54:48.135692627 +0200 -+++ b/vmime/stringContentHandler.hpp 2010-05-24 10:55:53.031689093 +0200 -@@ -80,6 +80,8 @@ - - bool isEmpty() const; - -+ bool isBuffered() const; -+ - private: - - // Equals to NO_ENCODING if data is not encoded, otherwise this diff --git a/src/vmime-1-fastforward.patch b/src/vmime-1-fastforward.patch new file mode 100644 index 0000000..e3f5852 --- /dev/null +++ b/src/vmime-1-fastforward.patch @@ -0,0 +1,17232 @@ +This file is part of mingw-cross-env. +See doc/index.html for further information. + +Fast-forward to latest vmime 0.9.1 from svn +http://sourceforge.net/projects/vmime/develop + +Produced with this script: +#--------------------------------------------------------------------# +#!/bin/bash + +( + echo "This file is part of mingw-cross-env." + echo "See doc/index.html for further information." + echo + echo "Fast-forward to latest vmime 0.9.1 from svn" + echo "http://sourceforge.net/projects/vmime/develop" + echo + echo "Produced with this script:" + echo "#--------------------------------------------------------------------#" + cat "$0" + echo "#--------------------------------------------------------------------#" +) > src/vmime-1-fastforward.patch + +# setup git svn clone +#cd ~/projects/vmime/git +#git svn clone -s https://vmime.svn.sourceforge.net/svnroot/vmime +#git reset --hard +#git tag -f v0.9.1-start `git svn log --show-commit | grep r482 | cut -d "|" -f 2` +# get updates +#git svn fetch +#git svn rebase + +GITDIR=~/projects/vmime/git/vmime/vmime +PKGDIR=libvmime-0.9.0 + +rm -rf $PKGDIR +tar xf pkg/$PKGDIR.tar.bz2 + +( + cd $GITDIR + git reset --hard + git checkout master +) + +# Create patch to reset the tarball tree to the +# starting state in svn. This is actually one commit +# before 0.9.1 started. This compensates for left out +# and touched files. Only for files known to need it. +lst="bootstrap \ + doc/book/intro.tex \ + doc/book/net.tex \ + examples/viewer/viewer.cpp \ + m4/acx_pthread.m4 \ + m4/ost_posix.m4 \ + m4/ost_prog.m4 \ + m4/ost_pthread.m4 \ + m4/ost_systime.m4" + +for a in $lst; do + if [ -f $PKGDIR/$a ]; then + cp $PKGDIR/$a $GITDIR/$a + else + rm $GITDIR/$a + fi +done + +# write reset patch +( + cd $GITDIR + echo + git diff --relative -R v0.9.1-start^ -- $lst +) >> src/vmime-1-fastforward.patch + +( + cd $GITDIR + git reset --hard +) + +# write fast forward commits +( + cd $GITDIR + echo + git log --relative --reverse -p ^v0.9.1-start^ HEAD +) >> src/vmime-1-fastforward.patch + +# check the results +patch -d $PKGDIR -p1 -s < src/vmime-1-fastforward.patch +diff -rq $GITDIR $PKGDIR +#--------------------------------------------------------------------# + +diff --git b/bootstrap a/bootstrap +index cef3171..457eaa8 100755 +--- b/bootstrap ++++ a/bootstrap +@@ -40,6 +40,7 @@ if test $DIE = 0 ; then + || (echo "[NO]" ; cat bootstrap.tmpout ; rm -f bootstrap.tmpout ; not_a_command >& /dev/null) || DIE=1 + fi + ++# Bug with automake 1.10? + touch autotools/config.rpath + + if test $DIE = 0 ; then +diff --git b/doc/book/intro.tex a/doc/book/intro.tex +new file mode 100644 +index 0000000..93a3675 +--- /dev/null ++++ a/doc/book/intro.tex +@@ -0,0 +1,90 @@ ++\chapter{Introduction} ++ ++% ============================================================================ ++\section{Overview} ++ ++VMime is a powerful C++ class library for working with MIME messages and ++Internet messaging services like IMAP, POP or SMTP. ++ ++With VMime you can parse, generate and modify messages, and also connect to ++store and transport services to receive or send messages over the Internet. ++The library offers all the features to build a complete mail client. ++ ++The main objectives of this library are: ++ ++\begin{itemize} ++\item fully RFC-compliant implementation; ++\item object-oriented and modular design; ++\item very easy-to-use (intuitive design); ++\item well documented code; ++\item very high reliability; ++\item maximum portability. ++\end{itemize} ++ ++ ++% ============================================================================ ++\section{Features} ++ ++\noindent MIME features: ++ ++\begin{itemize} ++\item Full support for RFC-2822 and multipart messages (RFC-1521) ++\item Aggregate documents (MHTML) and embedded objects (RFC-2557) ++\item Message Disposition Notification (RFC-3798) ++\item 8-bit MIME (RFC-2047) ++\item Encoded word extensions (RFC-2231) ++\item Attachments ++\end{itemize} ++ ++\noindent Network features: ++ ++\begin{itemize} ++\item Support for IMAP, POP3 and maildir stores ++\item Support for SMTP and sendmail transport methods ++\item Extraction of whole message or specific parts ++\item TLS/SSL security layer ++\item SASL authentication ++\end{itemize} ++ ++ ++% ============================================================================ ++\section{Copyright and license} ++ ++VMime library is Free Software and is licensed under the terms of the GNU ++General Public License\footnote{See Appendix \ref{appendix_license} and ++\url{http://www.gnu.org/copyleft/gpl.html}} (GPL): ++ ++\begin{verbatim} ++ Copyright (C) 2002-2008 Vincent Richard ++ ++ VMime library 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. ++ ++ VMime 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. ++ ++ 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 cover the whole combination. ++\end{verbatim} ++ ++\newpage ++\noindent This document is released under the terms of the ++GNU Free Documentation ++License\footnote{See \url{http://www.gnu.org/copyleft/fdl.html}} (FDL): ++ ++\begin{verbatim} ++ Copyright (C) 2004-2007 Vincent Richard ++ ++ Permission is granted to copy, distribute and/or modify ++ this document under the terms of the GNU Free Documentation ++ License, Version 1.2 or any later version published by the ++ Free Software Foundation; with no Invariant Sections, no ++ Front-Cover Texts, and no Back-Cover Texts. ++\end{verbatim} ++ +diff --git b/doc/book/net.tex a/doc/book/net.tex +new file mode 100644 +index 0000000..08b7df5 +--- /dev/null ++++ a/doc/book/net.tex +@@ -0,0 +1,976 @@ ++\chapter{Working with Messaging Services} ++ ++% ============================================================================ ++\section{Introduction} ++ ++In addition to parsing and building MIME messages, VMime also offers a lot of ++features to work with messaging services. This includes connecting to remote ++messaging stores (like IMAP or POP3), local stores (maildir) and transport ++services (send messages over SMTP or local sendmail), through an unified ++interface (see Figure \ref{uml_messaging_module}). That means that you can ++use independently IMAP of POP3 without having to change any line of code. ++ ++Source code of {\vexample Example6} covers all features presented in this ++chapter, so it is important you take some time to read it. ++ ++\begin{figure} ++ \center\includegraphics[width=0.9\textwidth] ++ {images/messaging-services.png} ++ \caption{Overall structure of the messaging module} ++ \label{uml_messaging_module} ++\end{figure} ++ ++The interface is composed of five classes: ++ ++\begin{itemize} ++\item {\vcode vmime::net::service}: this is the base interface for a ++messaging service. It can be either a store service or a transport ++service. ++ ++\item {\vcode vmime::net::serviceFactory}: create instances of a service. ++This is used internally by the session object (see below). ++ ++\item {\vcode vmime::net::store}: interface for a store service. A store ++service offers access to a set of folders containing messages. This is ++used for IMAP, POP3 and maildir. ++ ++\item {\vcode vmime::net::transport}: interface for a transport service. ++A transport service is capable of sending messages. This is used for ++SMTP and sendmail. ++ ++\item {\vcode vmime::net::session}: a session oject is used to store the ++parameters used by a service (eg. connection parameters). Each service ++instance is associated with only one session. The session object is capable ++of creating instances of services. ++\end{itemize} ++ ++The following classes are specific to store services: ++ ++\begin{itemize} ++\item {\vcode vmime::net::folder}: a folder can either contain other folders ++or messages, or both. ++ ++\item {\vcode vmime::net::message}: this is the interface for dealing with ++messages. For a given message, you can have access to its flags, its MIME ++structure and you can also extract the whole message data or given parts (if ++supported by the underlying protocol). ++\end{itemize} ++ ++ ++% ============================================================================ ++\section{Working with sessions} ++ ++\subsection{Setting properties} % -------------------------------------------- ++ ++Sessions are used to store configuration parameters for services. They ++contains a set of typed properties that can modify the behaviour of the ++services. Before using a messaging service, you must create and ++initialize a session object: ++ ++\begin{lstlisting} ++vmime::ref theSession = vmime::create (); ++\end{lstlisting} ++ ++Session properties include: ++ ++\begin{itemize} ++\item connection parameters: host and port to connect to; ++\item authentication parameters: user credentials required to use the ++service (if any); ++\item protocol-specific parameters: enable or disable extensions (eg. APOP ++support in POP3). ++\end{itemize} ++ ++Properties are stored using a dotted notation, to specify the service type, ++the protocol name, the category and the name of the property: ++ ++\begin{verbatim} ++ {service_type}.{protocol}.category.name ++\end{verbatim} ++ ++An example of property is \emph{store.pop3.options.apop} (used to enable or ++disable the use of APOP authentication). The \emph{store.pop3} part is called ++the \emph{prefix}. This allow specifying different values for the same ++property depending on the protocol used. ++ ++The session properties are stored in a {\vcode vmime::propertySet} object. ++To set the value of a property, you can use either: ++ ++\begin{lstlisting} ++theSession->getProperties().setProperty("property-name", value); ++\end{lstlisting} ++ ++or: ++ ++\begin{lstlisting} ++theSession->getProperties()["property-name"] = value; ++\end{lstlisting} ++ ++ ++\subsection{Available properties} % ------------------------------------------ ++ ++Following is a list of available properties and the protocols they apply to, ++as the time of writing this documentation\footnote{You can get an up-to-date ++list of the properties by running \vexample{Example7}}. For better clarity, ++the prefixes do not appear in this table. ++ ++\begin{table}[!ht] ++\noindent\begin{tabularx}{1.0\textwidth}{|l|c|X|c|c|c|c|c|c|c|c|} ++\hline ++ {\bf Property name} & ++ {\bf Type} & ++ {\bf Description} & ++ \verti{\bf POP3} & ++ \verti{\bf POP3S} & ++ \verti{\bf IMAP} & ++ \verti{\bf IMAPS} & ++ \verti{\bf SMTP} & ++ \verti{\bf SMTPS} & ++ \verti{\bf maildir} & ++ \verti{\bf sendmail} \\ ++\hline ++\hline ++options.sasl & bool & Set to {\vcode true} to use SASL authentication, if ++available. & \vdot & \vdot & \vdot & \vdot & \vdot & \vdot & & \\ ++\hline ++options.sasl.fallback & bool & Fail if SASL authentication failed (do not ++try other authentication mechanisms). & \vdot & \vdot & \vdot & \vdot & ++\vdot & \vdot & & \\ ++\hline ++auth.username\footnote{You should use authenticators ++instead.\label{fn_auth_username}} & string & Set the username of the account ++to connect to. & \vdot & \vdot & \vdot & \vdot & \vdot & \vdot & & \\ ++\hline ++auth.password\footref{fn_auth_username} & string & Set the password of the ++account. & \vdot & \vdot & \vdot & \vdot & \vdot & \vdot & & \\ ++\hline ++connection.tls & bool & Set to {\vcode true} to start a secured connection ++using STARTTLS extension, if available. & \vdot & & \vdot & & \vdot & & & \\ ++\hline ++connection.tls.required & bool & Fail if a secured connection cannot be ++started. & \vdot & & \vdot & & \vdot & & & \\ ++\hline ++server.address & string & Server host name or IP address. &\vdot & \vdot & ++\vdot & \vdot & \vdot & \vdot & & \\ ++\hline ++server.port & int & Server port. & \vdot & \vdot & \vdot & \vdot & ++\vdot & \vdot & & \\ ++\hline ++server.rootpath & string & Root directory for mail repository (eg. ++\emph{/home/vincent/Mail}). & & & & & & & \vdot & \\ ++\hline ++\end{tabularx} ++\caption{Properties common to all protocols} ++\end{table} ++ ++\newpage ++These are the protocol-specific options: ++ ++\begin{table}[!ht] ++\noindent\begin{tabularx}{1.0\textwidth}{|l|c|X|} ++\hline ++ {\bf Property name} & ++ {\bf Type} & ++ {\bf Description} \\ ++% POP3/POP3S ++\hline ++\multicolumn{3}{|c|}{POP3, POP3S} \\ ++\hline ++store.pop3.options.apop & bool & Enable or disable authentication with ++APOP (if SASL is enabled, this occurs after all SASL mechanisms have been ++tried). \\ ++\hline ++store.pop3.options.apop.fallback & bool & If set to {\vcode true} and ++APOP fails, the authentication process fails (ie. unsecure plain text ++authentication is not used). \\ ++\hline ++% SMTP ++\multicolumn{3}{|c|}{SMTP, SMTPS} \\ ++\hline ++transport.smtp.options.need-authentication & bool & Set to \emph{true} if ++the server requires to authenticate before sending messages. \\ ++\hline ++% sendmail ++\multicolumn{3}{|c|}{sendmail} \\ ++\hline ++transport.sendmail.binpath & string & The path to the \emph{sendmail} ++executable on your system. The default is the one found by the configuration ++script when VMime was built. \\ ++\hline ++\end{tabularx} ++\caption{Protocol-specific options} ++\end{table} ++ ++ ++\subsection{Instanciating services} % ---------------------------------------- ++ ++You can create a service either by specifying its protocol name, or by ++specifying the URL of the service. Creation by name is deprecated so ++this chapter only presents the latter option. ++ ++The URL scheme for connecting to services is: ++ ++\begin{verbatim} ++ protocol://[username[:password]@]host[:port]/[root-path] ++\end{verbatim} ++ ++\vnote{For local services (ie. \emph{sendmail} and \emph{maildir}), the host ++part is not used, but it must not be empty (you can use "localhost").} ++ ++The following table shows an example URL for each service: ++ ++\noindent\begin{tabularx}{1.0\textwidth}{|c|X|} ++\hline ++ {\bf Service} & ++ {\bf Connection URL} \\ ++\hline ++imap, imaps & {\tt imap://imap.example.com}, ++{\tt imaps://vincent:pass@example.com} \\ ++\hline ++pop3, pop3s & {\tt pop3://pop3.example.com} \\ ++\hline ++smtp, smtps & {\tt smtp://smtp.example.com} \\ ++\hline ++maildir & {\tt maildir://localhost/home/vincent/Mail} (host not used) \\ ++\hline ++sendmail & {\tt sendmail://localhost} (host not used, always localhost) \\ ++\hline ++\end{tabularx} ++ ++\newpage ++ ++When you have the connection URL, instanciating the service is quite simple. ++Depending on the type of service, you will use either {\vcode getStore()} or ++{\vcode getTransport()}. For example, for store services, use: ++ ++\begin{lstlisting} ++vmime::utility:url url("imap://user:pass@imap.example.com"); ++vmime::ref st = sess->getStore(url); ++\end{lstlisting} ++ ++and for transport services: ++ ++\begin{lstlisting} ++vmime::utility:url url("smtp://smtp.example.com"); ++vmime::ref tr = sess->getTransport(url); ++\end{lstlisting} ++ ++ ++% ============================================================================ ++\section{User credentials and authenticators} ++ ++Some services need some user credentials (eg. username and password) to open ++a session. In VMime, user credentials can be specified in the session ++properties or by using a custom authenticator (callback). ++ ++\begin{lstlisting}[caption={Setting user credentials using session ++properties}] ++vmime::ref sess; // Suppose we have a session ++ ++sess->getProperties()["store.imap.auth.username"] = "vincent"; ++sess->getProperties()["store.imap.auth.password"] = "my-password"; ++\end{lstlisting} ++ ++Although not recommended, you can also specify username and password ++directly in the connection URL, ++ie: \emph{imap://username:password@imap.example.com/}. This works only for ++services requiring an username and a password as user credentials, and no ++other information. ++ ++Sometimes, it may not be very convenient to set username/password in the ++session properties, or not possible (eg. extended SASL mechanisms) . That's ++why VMime offers an alternate way of getting user credentials: the ++{\vcode authenticator} object. Basically, an authenticator is an object that ++can return user credentials on-demand (like a callback). ++ ++Currently, there are two types of authenticator in VMime: a basic ++authenticator (class {\vcode vmime::security::authenticator}) and, if SASL ++support is enabled, a SASL authenticator ++(class {\vcode vmime::security::sasl::SASLAuthenticator}). Usually, you ++should use the default implementations, or at least make your own ++implementation inherit from them. ++ ++The following example shows how to use a custom authenticator to request ++the user to enter her/his credentials: ++ ++\begin{lstlisting}[caption={A simple interactive authenticator}] ++class myAuthenticator : public vmime::security::defaultAuthenticator ++{ ++ const string getUsername() const ++ { ++ std::cout << "Enter your username: " << std::endl; ++ ++ vmime::string res; ++ std::getline(std::cin, res); ++ ++ return res; ++ } ++ ++ const string getPassword() const ++ { ++ std::cout << "Enter your password: " << std::endl; ++ ++ vmime::string res; ++ std::getline(std::cin, res); ++ ++ return res; ++ } ++}; ++\end{lstlisting} ++ ++This is how to use it: ++ ++\begin{lstlisting} ++// First, create a session ++vmime::ref sess = ++ vmime::create (); ++ ++// Next, initialize a service which will use our authenticator ++vmime::ref st = ++ sess->getStore(vmime::utility::url("imap://imap.example.com"), ++ /* use our authenticator */ vmime::create ()); ++\end{lstlisting} ++ ++\vnote{An authenticator object should be used with one and only one service ++at a time. This is required because the authentication process may need to ++retrieve the service name (SASL).} ++ ++Of course, this example is quite simplified. For example, if several ++authentication mechanisms are tried, the user may be requested to enter the ++same information multiple times. See {\vexample Example6} for a more complex ++implementation of an authenticator, with caching support. ++ ++If you want to use SASL (ie. if \emph{options.sasl} is set to \emph{true}), ++your authenticator must inherit from ++{\vcode vmime::security::sasl::SASLAuthenticator} or ++{\vcode vmime::security::sasl::defaultSASLAuthenticator}, even if you do not ++use the SASL-specific methods {\vcode getAcceptableMechanisms()} and ++{\vcode setSASLMechanism()}. Have a look at {\vexample Example6} to see an ++implementation of an SASL authenticator. ++ ++\begin{lstlisting}[caption={A simple SASL authenticator}] ++class mySASLAuthenticator : public vmime::security::sasl::defaultSASLAuthenticator ++{ ++ typedef vmime::security::sasl::SASLMechanism mechanism; // save us typing ++ ++ const std::vector getAcceptableMechanisms ++ (const std::vector >& available, ++ vmime::ref suggested) const ++ { ++ // Here, you can sort the SASL mechanisms in the order they will be ++ // tried. If no SASL mechanism is acceptable (ie. for example, not ++ // enough secure), you can return an empty list. ++ // ++ // If you do not want to bother with this, you can simply return ++ // the default list, which is ordered by security strength. ++ return defaultSASLAuthenticator:: ++ getAcceptableMechanisms(available, suggested); ++ } ++ ++ void setSASLMechanism(vmime::ref mech) ++ { ++ // This is called when the authentication process is going to ++ // try the specified mechanism. ++ // ++ // The mechanism name is in mech->getName() ++ ++ defaultSASLAuthenticator::setSASLMechanism(mech); ++ } ++ ++ // ...implement getUsername() and getPassword()... ++}; ++\end{lstlisting} ++ ++ ++% ============================================================================ ++\section{Using transport service} ++ ++You have two possibilities for giving message data to the service when you ++want to send a message: ++ ++\begin{itemize} ++\item either you have a reference to a message (type {\vcode vmime::message}) ++and you can simply call {\vcode send(msg)}; ++\item or you only have raw message data (as a string, for example), and you ++have to call the second overload of {\vcode send()}, which takes additional ++parameters (corresponding to message envelope); ++\end{itemize} ++ ++The following example illustrates the use of a transport service to send a ++message using the second method: ++ ++\begin{lstlisting}[caption={Using a transport service}] ++const vmime::string msgData = ++ "From: me@example.org \r\n" ++ "To: you@example.org \r\n" ++ "Date: Sun, Oct 30 2005 17:06:42 +0200 \r\n" ++ "Subject: Test \r\n" ++ "\r\n" ++ "Message body"; ++ ++// Create a new session ++vmime::utility::url url("smtp://example.com"); ++ ++vmime::ref sess = ++ vmime::create (); ++ ++// Create an instance of the transport service ++vmime::ref tr = sess->getTransport(url); ++ ++// Connect it ++tr->connect(); ++ ++// Send the message ++vmime::utility::inputStreamStringAdapter is(msgData); ++ ++vmime::mailbox from("me@example.org"); ++vmime::mailboxList to; ++to.appendMailbox(vmime::create ("you@example.org")); ++ ++tr->send( ++ /* expeditor */ from, ++ /* recipient(s) */ to, ++ /* data */ is, ++ /* total length */ msgData.length()); ++ ++// We have finished using the service ++tr->disconnect(); ++\end{lstlisting} ++ ++\vnote{Exceptions can be thrown at any time when using a service. For better ++clarity, exceptions are not caught here, but be sure to catch them in your own ++application to provide error feedback to the user.} ++ ++If you use SMTP, you can enable authentication by setting some properties ++on the session object ({\vcode service::setProperty()} is a shortcut for ++setting properties on the session with the correct prefix): ++ ++\begin{lstlisting} ++tr->setProperty("options.need-authentication", true); ++tr->setProperty("auth.username", "user"); ++tr->setProperty("auth.password", "password"); ++\end{lstlisting} ++ ++ ++% ============================================================================ ++\section{Using store service} ++ ++\subsection{Connecting to a store} % ----------------------------------------- ++ ++The first basic step for using a store service is to connect to it. The ++following example shows how to initialize a session and instanciate the ++store service: ++ ++\begin{lstlisting}[caption={Connecting to a store service}] ++// Create a new session ++vmime::utility::url url("imap://vincent:password@imap:example.org"); ++ ++vmime::ref sess = ++ vmime::create (); ++ ++// Create an instance of the transport service ++vmime::ref store = sess->getStore(url); ++ ++// Connect it ++store->connect(); ++\end{lstlisting} ++ ++\vnote{{\vexample Example6} contains a more complete example for connecting ++to a store service, with support for a custom authenticator.} ++ ++\subsection{Opening a folder} % ---------------------------------------------- ++ ++You can open a folder using two different access modes: either in ++\emph{read-only} mode (where you can only read message flags and contents), or ++in \emph{read-write} mode (where you can read messages, but also delete them ++or add new ones). When you have a reference to a folder, simply call the ++{\vcode open()} method with the desired access mode: ++ ++\begin{lstlisting} ++folder->open(vmime::net::folder::MODE_READ_WRITE); ++\end{lstlisting} ++ ++\vnote{Not all stores support the \emph{read-write} mode. By default, if the ++\emph{read-write} mode is not available, the folder silently fall backs on ++the \emph{read-only} mode, unless the \emph{failIfModeIsNotAvailable} argument ++to {\vcode open()} is set to true.} ++ ++Call {\vcode getDefaultFolder()} on the store to obtain a reference to the ++default folder, which is usually the INBOX folder (where messages arrive when ++they are received). ++ ++You can also open a specific folder by specifying its path. The following ++example will open a folder named \emph{bar}, which is a child of \emph{foo} ++in the root folder: ++ ++\begin{lstlisting}[caption={Opening a folder from its path}] ++vmime::net::folder::path path; ++path /= vmime::net::folder::path::component("foo"); ++path /= vmime::net::folder::path::component("bar"); ++ ++vmime::ref fld = store->getFolder(path); ++fld->open(vmime::net::folder::MODE_READ_WRITE); ++\end{lstlisting} ++ ++\vnote{You can specify a path as a string as there is no way to get the ++separator used to delimitate path components. Always use {\vcode operator/=} ++or {\vcode appendComponent}.} ++ ++\vnote{Path components are of type {\vcode vmime::word}, which means that ++VMime supports folder names with extended characters, not only 7-bit ++US-ASCII. However, be careful that this may not be supported by the ++underlying store protocol (IMAP supports it, because it uses internally a ++modified UTF-7 encoding).} ++ ++\subsection{Fetching messages} % --------------------------------------------- ++ ++You can fetch some information about a message without having to download the ++whole message. Moreover, folders support fetching for multiple messages in ++a single request, for better performance. The following items are currently ++available for fetching: ++ ++\begin{itemize} ++\item {\bf envelope}: sender, recipients, date and subject; ++\item {\bf structure}: MIME structure of the message; ++\item {\bf content-info}: content-type of the root part; ++\item {\bf flags}: message flags; ++\item {\bf size}: message size; ++\item {\bf header}: retrieve all the header fields of a message; ++\item {\bf uid}: unique identifier of a message; ++\item {\bf importance}: fetch header fields suitable for use with ++{\vcode misc::importanceHelper}. ++\end{itemize} ++ ++\vnote{Not all services support all fetchable items. Call ++{\vcode getFetchCapabilities()} on a folder to know which information can be ++fetched by a service.} ++ ++The following code shows how to list all the messages in a folder, and ++retrieve basic information to show them to the user: ++ ++\begin{lstlisting}[caption={Fetching information about multiple messages}] ++std::vector > allMessages = folder->getMessages(); ++ ++folder->fetchMessages(allMessages, ++ vmime::net::folder::FETCH_FLAGS | ++ vmime::net::folder::FETCH_ENVELOPE); ++ ++for (unsigned int i = 0 ; i < allMessages.size() ; ++i) ++{ ++ vmime::ref msg = allMessages[i]; ++ ++ const int flags = msg->getFlags(); ++ ++ std::cout << "Message " << i << ":" << std::endl; ++ ++ if (flags & vmime::net::message::FLAG_SEEN) ++ std::cout << " - is read" << std::endl; ++ if (flags & vmime::net::message::FLAG_DELETED) ++ std::cout << " - is deleted" << std::endl; ++ ++ vmime::ref hdr = msg->getHeader(); ++ ++ std::cout << " - sent on " << hdr->Date()->generate() << std::endl; ++ std::cout << " - sent by " << hdr->From()->generate() << std::endl; ++} ++\end{lstlisting} ++ ++\subsection{Extracting messages and parts} ++ ++To extract the whole contents of a message (including headers), use the ++{\vcode extract()} method on a {\vcode vmime::net::message} object. The ++following example extracts the first message in the default folder: ++ ++\begin{lstlisting}[caption={Extracting messages}] ++// Get a reference to the folder and to its first message ++vmime::ref folder = store->getDefaultFolder(); ++vmime::ref msg = folder->getMessage(1); ++ ++// Write the message contents to the standard output ++vmime::utility::outputStreamAdapter out(std::cout); ++msg->extract(out); ++\end{lstlisting} ++ ++Some protocols (like IMAP) also support the extraction of specific MIME parts ++of a message without downloading the whole message. This can save bandwidth ++and time. The method {\vcode extractPart()} is used in this case: ++ ++\begin{lstlisting}[caption={Extracting a specific MIME part of a message}] ++// Fetching structure is required before extracting a part ++folder->fetchMessage(msg, vmime::net::folder::FETCH_STRUCTURE); ++ ++// Now, we can extract the part ++msg->extractPart(msg->getStructure()->getPartAt(0)->getPartAt(1)); ++\end{lstlisting} ++ ++Suppose we have a message with the following structure: ++ ++\begin{verbatim} ++ multipart/mixed ++ text/html ++ image/jpeg [*] ++\end{verbatim} ++ ++The previous example will extract the header and body of the \emph{image/jpeg} ++part. ++ ++\subsection{Events} % -------------------------------------------------------- ++ ++As a result of executing some operation (or from time to time, even if no ++operation has been performed), a store service can send events to notify you ++that something has changed (eg. the number of messages in a folder). These ++events may allow you to update the user interface associated to a message ++store. ++ ++Currently, there are three types of event: ++ ++\begin{itemize} ++\item {\bf message change}: sent when the number of messages in a folder ++has changed (ie. some messages have been added or removed); ++\item {\bf message count change}: sent when one or more message(s) have ++changed (eg. flags or deleted status); ++\item {\bf folder change}: sent when a folder has been created, renamed or ++deleted. ++\end{itemize} ++ ++You can register a listener for each event type by using the corresponding ++methods on a {\vcode folder} object: {\vcode addMessageChangedListener()}, ++{\vcode addMessageCountListener()} or {\vcode addFolderListener()}. For more ++information, please read the class documentation for ++{\vcode vmime::net::events} namespace. ++ ++ ++% ============================================================================ ++\section{Handling time-outs} ++ ++Unexpected errors can occur while messaging services are performing ++operations and waiting a response from the server (eg. server stops ++responding, network link falls down). As all operations as synchronous, ++they can be ``blocked'' a long time before returning (in fact, they loop ++until they either receive a response from the server, or the underlying ++socket system returns an error). ++ ++VMime provides a mechanism to control the duration of operations. This ++mechanism allows the program to cancel an operation that is currently ++running. ++ ++An interface called {\vcode timeoutHandler} is provided: ++ ++\begin{lstlisting} ++class timeoutHandler : public object ++{ ++ /** Called to test if the time limit has been reached. ++ * ++ * @return true if the time-out delay is elapsed ++ */ ++ virtual const bool isTimeOut() = 0; ++ ++ /** Called to reset the time-out counter. ++ */ ++ virtual void resetTimeOut() = 0; ++ ++ /** Called when the time limit has been reached (when ++ * isTimeOut() returned true). ++ * ++ * @return true to continue (and reset the time-out) ++ * or false to cancel the current operation ++ */ ++ virtual const bool handleTimeOut() = 0; ++}; ++\end{lstlisting} ++ ++While the operation runs, the service calls {\vcode isTimeout()} at variable ++intervals. If the function returns {\vcode true}, then ++{\vcode handleTimeout()} is called. If it also returns {\vcode true}, the ++operation is cancelled and an {\vcode operation\_timed\_out} exception is ++thrown. The function {\vcode resetTimeout()} is called each time data has ++been received from the server to reset time-out delay. ++ ++The following example shows how to implement a simple time-out handler: ++ ++\begin{lstlisting}[caption={Implementing a simple time-out handler}] ++class myTimeoutHandler : public vmime::net::timeoutHandler ++{ ++public: ++ ++ const bool isTimeOut() ++ { ++ return (getTime() >= m_last + 30); // 30 seconds time-out ++ } ++ ++ void resetTimeOut() ++ { ++ m_last = getTime(); ++ } ++ ++ const bool handleTimeOut() ++ { ++ std::cout << "Operation timed out." << std::endl; ++ << "Press [Y] to continue, or [N] to " ++ << "cancel the operation." << std::endl; ++ ++ std::string response; ++ std::cin >> response; ++ ++ return (response == "y" || response == "Y"); ++ } ++ ++private: ++ ++ const unsigned int getTime() const ++ { ++ return vmime::platform::getHandler()->getUnixTime(); ++ } ++ ++ unsigned int m_last; ++}; ++\end{lstlisting} ++ ++To make the service use your time-out handler, you need to write a factory ++class, to allow the service to create instances of the handler class. This ++is required because the service can use several connections to the server ++simultaneously, and each connection needs its own time-out handler. ++ ++\begin{lstlisting} ++class myTimeoutHandlerFactory : public vmime::net::timeoutHandlerFactory ++{ ++public: ++ ++ ref create() ++ { ++ return vmime::create (); ++ } ++}; ++\end{lstlisting} ++ ++Then, call the {\vcode setTimeoutHandlerFactory()} method on the service object ++to set the time-out handler factory to use during the session: ++ ++\begin{lstlisting} ++theService->setTimeoutHandlerFactory(vmime::create ()); ++\end{lstlisting} ++ ++ ++% ============================================================================ ++\newpage ++\section{Secured connection using TLS/SSL} ++ ++\subsection{Introduction} % -------------------------------------------------- ++ ++If you have enabled TLS support in VMime, you can configure messaging services ++so that they use a secured connection. ++ ++Quoting from RFC-2246 - the TLS 1.0 protocol specification: \emph{`` The TLS ++protocol provides communications privacy over the Internet. The protocol ++allows client/server applications to communicate in a way that is designed ++to prevent eavesdropping, tampering, or message forgery.''} ++ ++TLS has the following advantages: ++ ++\begin{itemize} ++\item authentication: server identity can be verified; ++\item privacy: transmission of data between client and server cannot be read ++by someone in the middle of the connection; ++\item integrity: original data which is transferred between a client and a ++server can not be modified by an attacker without being detected. ++\end{itemize} ++ ++\vnote{What is the difference between SSL and TLS? SSL is a protocol designed ++by Netscape. TLS is a standard protocol, and is partly based on version 3 of ++the SSL protocol. The two protocols are not interoperable, but TLS does ++support a mechanism to back down to SSL 3.} ++ ++VMime offers two possibilities for using a secured connection: ++ ++\begin{itemize} ++\item you can connect to a server listening on a special port (eg. IMAPS ++instead of IMAP): this is the classical use of SSL, but is now deprecated; ++\item connect to a server listening on the default port, and then begin a ++secured connection: this is STARTTLS. ++\end{itemize} ++ ++ ++\subsection{Setting up a secured connection} % ------------------------------- ++ ++\subsubsection{Connecting to a ``secured'' port} % ........................... ++ ++To use the classical SSL/TLS way, simply use the ``S'' version of the protocol ++to connect to the server (eg. \emph{imaps} instead of \emph{imap}). This is ++currently available for SMTP, POP3 and IMAP. ++ ++\begin{lstlisting} ++vmime::ref store = ++ theSession->getStore(vmime::utility::url("imaps://example.org")); ++\end{lstlisting} ++ ++\subsubsection{Using STARTTLS} % ............................................. ++ ++To make the service start a secured session using the STARTTLS method, simply ++set the \emph{connection.tls} property: ++ ++\begin{lstlisting} ++theService->setProperty("connection.tls", true); ++\end{lstlisting} ++ ++\vnote{If, for some reason, a secured connection cannot be started, the ++default behaviour is to fallback on a normal connection. To make ++{\vcode connect()} fail if STARTTLS fails, set the ++\emph{connection.tls.required} to \emph{true}.} ++ ++\subsection{Certificate verification} % -------------------------------------- ++ ++\subsubsection{How it works} % ............................................... ++ ++If you tried the previous examples, a ++{\vcode certificate\_verification\_exception} might have been thrown. ++This is because the default certificate verifier in VMime did not manage to ++verify the certificate, and so could not trust it. ++ ++Basically, when you connect to a server using TLS, the server responds with ++a list of certificates, called a certificate chain (usually, certificates are ++of type X.509\footnote{And VMime currently supports only X.509 certificates}). ++The certificate chain is ordered so that the first certificate is the subject ++certificate, the second is the subject's issuer one, the third is the issuer's ++issuer, and so on. ++ ++To decide whether the server can be trusted or not, you have to verify that ++\emph{each} certificate is valid (ie. is trusted). For more information ++about X.509 and certificate verification, see related articles on Wikipedia ++\footnote{See \url{http://wikipedia.org/wiki/Public\_key\_certificate}}. ++ ++\subsubsection{Using the default certificate verifier} % ..................... ++ ++The default certificate verifier maintains a list of root (CAs) and user ++certificates that are trusted. By default, the list is empty. So, you have ++to initialize it before using the verifier. ++ ++The algorithm\footnote{See ++\url{http://wikipedia.org/wiki/Certification\_path\_validation\_algorithm}} ++used is quite simple: ++ ++\begin{enumerate} ++\item for every certificate in the chain, verify that the certificate has been ++issued by the next certificate in the chain; ++\item for every certificate in the chain, verify that the certificate is valid ++at the current time; ++\item decide whether the subject's certificate can be trusted: ++ \begin{itemize} ++ \item first, verify that the the last certificate in the chain was ++ issued by a third-party that we trust (root CAs); ++ \item if the issuer certificate cannot be verified against root CAs, ++ compare the subject's certificate against the trusted certificates ++ (the certificates the user has decided to trust). ++ \end{itemize} ++\end{enumerate} ++ ++First, we need some code to load existing X.509 certificates: ++ ++\begin{lstlisting}[caption={Reading a X.509 certificate from a file}] ++vmime::ref ++ loadX509CertificateFromFile(const std::string& path) ++{ ++ std::ifstream certFile; ++ certFile.open(path.c_str(), std::ios::in | std::ios::binary); ++ ++ if (!certFile) ++ { ++ // ...handle error... ++ } ++ ++ vmime::utility::inputStreamAdapter is(certFile); ++ vmime::ref cert; ++ ++ // Try DER format ++ cert = vmime::security::cert::X509Certificate::import ++ (is, vmime::security::cert::X509Certificate::FORMAT_DER); ++ ++ if (cert != NULL) ++ return cert; ++ ++ // Try PEM format ++ is.reset(); ++ cert = vmime::security::cert::X509Certificate::import ++ (is, vmime::security::cert::X509Certificate::FORMAT_PEM); ++ ++ return cert; ++} ++\end{lstlisting} ++ ++Then, we can use the {\vcode loadX509CertificateFromFile} function to load ++certificates and initialize the certificate verifier: ++ ++\begin{lstlisting}[caption={Using the default certificate verifier}] ++vmime::ref vrf = ++ vmime::create (); ++ ++// Load root CAs (such as Verisign or Thawte) ++std::vector > rootCAs; ++ ++rootCAs.push_back(loadX509CertificateFromFile("/path/to/root-ca1.cer"); ++rootCAs.push_back(loadX509CertificateFromFile("/path/to/root-ca2.cer"); ++rootCAs.push_back(loadX509CertificateFromFile("/path/to/root-ca3.cer"); ++ ++vrf->setX509RootCAs(rootCAs); ++ ++// Then, load certificates that the user explicitely chose to trust ++std::vector > trusted; ++ ++trusted.push_back(loadX509CertificateFromFile("/path/to/trusted-site1.cer"); ++trusted.push_back(loadX509CertificateFromFile("/path/to/trusted-site2.cer"); ++ ++vrf->setX509TrustedCerts(trusted); ++\end{lstlisting} ++ ++ ++\subsubsection{Writing your own certificate verifier} % ...................... ++ ++If you need to do more complex verifications on certificates, you will have to ++write your own verifier. Your verifier should inherit from the ++{\vcode vmime::security::cert::certificateVerifier} class and implement the ++method {\vcode verify()}. Then, if the specified certificate chain is trusted, ++simply return from the function, or else throw a ++{\vcode certificate\_verification\_exception}. ++ ++The following example shows how to implement an interactive certificate ++verifier which relies on the user's decision, and nothing else (you SHOULD NOT ++use this in a production application as this is obviously a serious security ++issue): ++ ++\begin{lstlisting}[caption={A custom certificate verifier}] ++class myCertVerifier : public vmime::security::cert::certificateVerifier ++{ ++public: ++ ++ void verify(vmime::ref certs) ++ { ++ // Obtain the subject's certificate ++ vmime::ref cert = chain->getAt(0); ++ ++ std::cout << std::endl; ++ std::cout << "Server sent a '" << cert->getType() << "'" ++ << " certificate." << std::endl; ++ std::cout << "Do you want to accept this certificate? (Y/n) "; ++ std::cout.flush(); ++ ++ std::string answer; ++ std::getline(std::cin, answer); ++ ++ if (answer.length() != 0 && (answer[0] == 'Y' || answer[0] == 'y')) ++ return; // OK, we trust the certificate ++ ++ // Don't trust this certificate ++ throw exceptions::certificate_verification_exception(); ++ } ++}; ++\end{lstlisting} ++ ++\vnote{In production code, it may be a good idea to remember user's decisions ++about which certificates to trust and which not. See {\vexample Example6} for ++a basic cache implementation.} ++ ++Finally, to make the service use your own certificate verifier, simply write: ++ ++\begin{lstlisting} ++theService->setCertificateVerifier(vmime::create ()); ++\end{lstlisting} ++ +diff --git b/examples/viewer/viewer.cpp a/examples/viewer/viewer.cpp +new file mode 100644 +index 0000000..50862b3 +--- /dev/null ++++ a/examples/viewer/viewer.cpp +@@ -0,0 +1,293 @@ ++// ++// VMime library (http://www.vmime.org) ++// Copyright (C) 2002-2008 Vincent Richard ++// ++// 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-1301 USA. ++// ++// 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 cover the whole combination. ++// ++ ++// ++// EXAMPLE DESCRIPTION: ++// ==================== ++// A simple MIME viewer to show all the components of a message. ++// The user interface is written using GTK+ 2.6. ++// ++// For more information, please visit: ++// http://www.vmime.org/ ++// ++ ++#include ++#include ++#include ++ ++#include ++ ++#include "vmime/vmime.hpp" ++#include "vmime/platforms/posix/posixHandler.hpp" ++ ++ ++ ++GtkWidget* window = NULL; ++GtkWidget* treeView = NULL; ++GtkWidget* textArea = NULL; ++ ++GtkTreeStore* treeModel = NULL; ++ ++vmime::ref currentMessage = NULL; ++ ++ ++ ++void insertRowInModel(GtkTreeStore* model, vmime::ref comp, GtkTreeIter* parent = NULL) ++{ ++ GtkTreeIter iter; ++ ++ gtk_tree_store_append(model, &iter, parent); ++ gtk_tree_store_set(model, &iter, 0, typeid(*comp).name(), 1, comp.get(), -1); ++ ++ const std::vector > children = comp->getChildComponents(); ++ ++ for (int i = 0 ; i < children.size() ; ++i) ++ { ++ insertRowInModel(model, children[i], &iter); ++ } ++} ++ ++ ++void updateTreeView() ++{ ++ GtkTreeStore* model = GTK_TREE_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(treeView))); ++ ++ g_object_ref(model); ++ gtk_tree_view_set_model(GTK_TREE_VIEW(treeView), NULL); ++ ++ gtk_tree_store_clear(model); ++ ++ insertRowInModel(model, currentMessage); ++ ++ gtk_tree_view_set_model(GTK_TREE_VIEW(treeView), GTK_TREE_MODEL(model)); ++ g_object_unref(model); ++} ++ ++ ++static void treeViewSelChanged(GtkTreeView* treeView, gpointer userData) ++{ ++ GtkTreePath* path = NULL; ++ GtkTreeViewColumn* col = NULL; ++ ++ gtk_tree_view_get_cursor(treeView, &path, &col); ++ ++ GtkTreeIter iter; ++ gtk_tree_model_get_iter(GTK_TREE_MODEL(treeModel), &iter, path); ++ ++ vmime::component* comp = NULL; ++ gtk_tree_model_get(GTK_TREE_MODEL(treeModel), &iter, 1, &comp, -1); ++ ++ GtkTextBuffer* textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textArea)); ++ GtkTextIter start, end; ++ ++ gtk_text_buffer_get_iter_at_offset(textBuffer, &start, comp->getParsedOffset()); ++ gtk_text_buffer_get_iter_at_offset(textBuffer, &end, comp->getParsedOffset() + comp->getParsedLength()); ++ ++ gtk_text_buffer_select_range(textBuffer, &start, &end); ++ ++ gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(textArea), &start, 0.0, FALSE, 0.0, 0.0); ++ ++ gtk_tree_path_free(path); ++} ++ ++ ++static void destroy(GtkWidget* widget, gpointer data) ++{ ++ gtk_main_quit(); ++} ++ ++ ++void openFile(const std::string& filename) ++{ ++ std::ifstream file; ++ file.open(filename.c_str(), std::ios::in | std::ios::binary); ++ ++ if (!file) ++ { ++ std::cerr << "Can't open file '" << filename << "'." << std::endl; ++ return; ++ } ++ ++ vmime::string data; ++ char buffer[16384]; ++ ++ do ++ { ++ file.read(buffer, sizeof(buffer)); ++ data += vmime::string(buffer, file.gcount()); ++ } ++ while (file.gcount()); ++ ++ vmime::ref msg = vmime::create (); ++ msg->parse(data); ++ ++ currentMessage = msg; ++ ++ char* convData = g_convert_with_fallback(data.c_str(), data.length(), ++ "UTF-8", "ISO-8859-1", "?", NULL, NULL, NULL); ++ ++ if (convData == NULL) ++ { ++ gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textArea)), ++ "GLib UTF-8 conversion error.", -1); ++ } ++ else ++ { ++ gtk_text_buffer_set_text(gtk_text_view_get_buffer(GTK_TEXT_VIEW(textArea)), ++ convData, strlen(convData)); ++ ++ g_free(convData); ++ } ++ ++ updateTreeView(); ++} ++ ++ ++static void onFileOpen() ++{ ++ GtkWidget* dlg = gtk_file_chooser_dialog_new ++ ("Open Message File", GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, ++ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, ++ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, ++ NULL); ++ ++ if (gtk_dialog_run(GTK_DIALOG(dlg)) == GTK_RESPONSE_ACCEPT) ++ { ++ char* filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dlg)); ++ ++ openFile(filename); ++ ++ g_free(filename); ++ } ++ ++ gtk_widget_destroy(dlg); ++} ++ ++ ++ ++// UI definitions ++static const GtkActionEntry uiActions[] = ++{ ++ { "FileMenu", NULL, "_File" }, ++ { "FileOpen", GTK_STOCK_OPEN, "_Open...", "O", NULL, G_CALLBACK(onFileOpen) }, ++ { "FileExit", GTK_STOCK_QUIT, "_Exit", "Q", NULL, G_CALLBACK(gtk_main_quit) } ++}; ++ ++static const char* uiDefinition = ++ "" \ ++ " " \ ++ " " \ ++ " " \ ++ " " \ ++ " " \ ++ " " \ ++ ""; ++ ++ ++int main(int argc, char* argv[]) ++{ ++ // VMime initialization ++ vmime::platform::setHandler(); ++ ++ // GTK+ initialization ++ gtk_init(&argc, &argv); ++ ++ // Create a new window ++ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); ++ ++ gtk_window_set_default_size(GTK_WINDOW(window), 800, 550); ++ gtk_window_set_title(GTK_WINDOW(window), "VMime Viewer Example"); ++ ++ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL); ++ ++ GtkWidget* vbox = gtk_vbox_new(FALSE, 0); ++ gtk_container_add(GTK_CONTAINER(window), vbox); ++ ++ // Menubar ++ GtkActionGroup* actionGroup = gtk_action_group_new ("Actions"); ++ gtk_action_group_add_actions(actionGroup, uiActions, G_N_ELEMENTS(uiActions), NULL); ++ ++ GtkUIManager* uiManager = gtk_ui_manager_new(); ++ gtk_ui_manager_insert_action_group(uiManager, actionGroup, 1); ++ gtk_ui_manager_add_ui_from_string(uiManager, uiDefinition, -1, NULL); ++ ++ GtkWidget* menuBar = gtk_ui_manager_get_widget(uiManager, "/MainMenuBar"); ++ ++ gtk_box_pack_start(GTK_BOX(vbox), menuBar, FALSE, FALSE, 0); ++ ++ // Horizontal Pane ++ GtkWidget* hpane = gtk_hpaned_new(); ++ gtk_box_pack_start(GTK_BOX(vbox), hpane, TRUE, TRUE, 0); ++ ++ // Tree View ++ treeModel = gtk_tree_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); ++ ++ treeView = gtk_tree_view_new(); ++ ++ g_signal_connect(G_OBJECT(treeView), "cursor-changed", G_CALLBACK(treeViewSelChanged), NULL); ++ ++ GtkWidget* scroll = gtk_scrolled_window_new(NULL, NULL); ++ ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll), GTK_SHADOW_IN); ++ gtk_container_add(GTK_CONTAINER(scroll), treeView); ++ ++ gtk_paned_add1(GTK_PANED(hpane), scroll); ++ ++ GtkTreeViewColumn* col = gtk_tree_view_column_new(); ++ gtk_tree_view_column_set_title(col, "Component Name"); ++ gtk_tree_view_append_column(GTK_TREE_VIEW(treeView), col); ++ ++ GtkCellRenderer* renderer = gtk_cell_renderer_text_new(); ++ ++ gtk_tree_view_column_pack_start(col, renderer, TRUE); ++ gtk_tree_view_column_add_attribute(col, renderer, "text", 0); ++ ++ gtk_tree_view_set_model(GTK_TREE_VIEW(treeView), GTK_TREE_MODEL(treeModel)); ++ g_object_unref(treeModel); ++ ++ gtk_widget_set_size_request(treeView, 200, 100); ++ ++ // Text Area ++ textArea = gtk_text_view_new(); ++ ++ gtk_text_view_set_editable(GTK_TEXT_VIEW(textArea), FALSE); ++ ++ scroll = gtk_scrolled_window_new(NULL, NULL); ++ ++ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); ++ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scroll), GTK_SHADOW_IN); ++ gtk_container_add(GTK_CONTAINER(scroll), textArea); ++ ++ gtk_paned_add2(GTK_PANED(hpane), scroll); ++ ++ // Show main window ++ gtk_widget_show_all(window); ++ ++ // GTK main loop ++ gtk_main(); ++ ++ return 0; ++} ++ ++ +diff --git b/m4/acx_pthread.m4 a/m4/acx_pthread.m4 +new file mode 100644 +index 0000000..b7f692a +--- /dev/null ++++ a/m4/acx_pthread.m4 +@@ -0,0 +1,235 @@ ++dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) ++dnl ++dnl This macro figures out how to build C programs using POSIX threads. ++dnl It sets the PTHREAD_LIBS output variable to the threads library and ++dnl linker flags, and the PTHREAD_CFLAGS output variable to any special ++dnl C compiler flags that are needed. (The user can also force certain ++dnl compiler flags/libs to be tested by setting these environment ++dnl variables.) ++dnl ++dnl Also sets PTHREAD_CC to any special C compiler that is needed for ++dnl multi-threaded programs (defaults to the value of CC otherwise). ++dnl (This is necessary on AIX to use the special cc_r compiler alias.) ++dnl ++dnl NOTE: You are assumed to not only compile your program with these ++dnl flags, but also link it with them as well. e.g. you should link ++dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS ++dnl $LIBS ++dnl ++dnl If you are only building threads programs, you may wish to use ++dnl these variables in your default LIBS, CFLAGS, and CC: ++dnl ++dnl LIBS="$PTHREAD_LIBS $LIBS" ++dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++dnl CC="$PTHREAD_CC" ++dnl ++dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute ++dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to ++dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). ++dnl ++dnl ACTION-IF-FOUND is a list of shell commands to run if a threads ++dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to ++dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the ++dnl default action will define HAVE_PTHREAD. ++dnl ++dnl Please let the authors know if this macro fails on any platform, or ++dnl if you have any other suggestions or comments. This macro was based ++dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with ++dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros ++dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. ++dnl We are also grateful for the helpful feedback of numerous users. ++dnl ++dnl @category InstalledPackages ++dnl @author Steven G. Johnson ++dnl @version 2005-01-14 ++dnl @license GPLWithACException ++ ++AC_DEFUN([ACX_PTHREAD], [ ++AC_REQUIRE([AC_CANONICAL_HOST]) ++AC_LANG_SAVE ++AC_LANG_C ++acx_pthread_ok=no ++ ++# We used to check for pthread.h first, but this fails if pthread.h ++# requires special compiler flags (e.g. on True64 or Sequent). ++# It gets checked for in the link test anyway. ++ ++# First of all, check if the user has set any of the PTHREAD_LIBS, ++# etcetera environment variables, and if threads linking works using ++# them: ++if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then ++ save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++ save_LIBS="$LIBS" ++ LIBS="$PTHREAD_LIBS $LIBS" ++ AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) ++ AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) ++ AC_MSG_RESULT($acx_pthread_ok) ++ if test x"$acx_pthread_ok" = xno; then ++ PTHREAD_LIBS="" ++ PTHREAD_CFLAGS="" ++ fi ++ LIBS="$save_LIBS" ++ CFLAGS="$save_CFLAGS" ++fi ++ ++# We must check for the threads library under a number of different ++# names; the ordering is very important because some systems ++# (e.g. DEC) have both -lpthread and -lpthreads, where one of the ++# libraries is broken (non-POSIX). ++ ++# Create a list of thread flags to try. Items starting with a "-" are ++# C compiler flags, and other items are library names, except for "none" ++# which indicates that we try without any flags at all, and "pthread-config" ++# which is a program returning the flags for the Pth emulation library. ++ ++acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" ++ ++# The ordering *is* (sometimes) important. Some notes on the ++# individual items follow: ++ ++# pthreads: AIX (must check this before -lpthread) ++# none: in case threads are in libc; should be tried before -Kthread and ++# other compiler flags to prevent continual compiler warnings ++# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) ++# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) ++# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ++# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) ++# -pthreads: Solaris/gcc ++# -mthreads: Mingw32/gcc, Lynx/gcc ++# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it ++# doesn't hurt to check since this sometimes defines pthreads too; ++# also defines -D_REENTRANT) ++# pthread: Linux, etcetera ++# --thread-safe: KAI C++ ++# pthread-config: use pthread-config program (for GNU Pth library) ++ ++case "${host_cpu}-${host_os}" in ++ *solaris*) ++ ++ # On Solaris (at least, for some versions), libc contains stubbed ++ # (non-functional) versions of the pthreads routines, so link-based ++ # tests will erroneously succeed. (We need to link with -pthread or ++ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather ++ # a function called by this macro, so we could check for that, but ++ # who knows whether they'll stub that too in a future libc.) So, ++ # we'll just look for -pthreads and -lpthread first: ++ ++ acx_pthread_flags="-pthread -pthreads pthread -mt $acx_pthread_flags" ++ ;; ++esac ++ ++if test x"$acx_pthread_ok" = xno; then ++for flag in $acx_pthread_flags; do ++ ++ case $flag in ++ none) ++ AC_MSG_CHECKING([whether pthreads work without any flags]) ++ ;; ++ ++ -*) ++ AC_MSG_CHECKING([whether pthreads work with $flag]) ++ PTHREAD_CFLAGS="$flag" ++ ;; ++ ++ pthread-config) ++ AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) ++ if test x"$acx_pthread_config" = xno; then continue; fi ++ PTHREAD_CFLAGS="`pthread-config --cflags`" ++ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ++ ;; ++ ++ *) ++ AC_MSG_CHECKING([for the pthreads library -l$flag]) ++ PTHREAD_LIBS="-l$flag" ++ ;; ++ esac ++ ++ save_LIBS="$LIBS" ++ save_CFLAGS="$CFLAGS" ++ LIBS="$PTHREAD_LIBS $LIBS" ++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++ ++ # Check for various functions. We must include pthread.h, ++ # since some functions may be macros. (On the Sequent, we ++ # need a special flag -Kthread to make this header compile.) ++ # We check for pthread_join because it is in -lpthread on IRIX ++ # while pthread_create is in libc. We check for pthread_attr_init ++ # due to DEC craziness with -lpthreads. We check for ++ # pthread_cleanup_push because it is one of the few pthread ++ # functions on Solaris that doesn't have a non-functional libc stub. ++ # We try pthread_create on general principles. ++ AC_TRY_LINK([#include ], ++ [pthread_t th; pthread_join(th, 0); ++ pthread_attr_init(0); pthread_cleanup_push(0, 0); ++ pthread_create(0,0,0,0); pthread_cleanup_pop(0); ], ++ [acx_pthread_ok=yes]) ++ ++ LIBS="$save_LIBS" ++ CFLAGS="$save_CFLAGS" ++ ++ AC_MSG_RESULT($acx_pthread_ok) ++ if test "x$acx_pthread_ok" = xyes; then ++ break; ++ fi ++ ++ PTHREAD_LIBS="" ++ PTHREAD_CFLAGS="" ++done ++fi ++ ++# Various other checks: ++if test "x$acx_pthread_ok" = xyes; then ++ save_LIBS="$LIBS" ++ LIBS="$PTHREAD_LIBS $LIBS" ++ save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++ ++ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. ++ AC_MSG_CHECKING([for joinable pthread attribute]) ++ attr_name=unknown ++ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do ++ AC_TRY_LINK([#include ], [int attr=$attr;], ++ [attr_name=$attr; break]) ++ done ++ AC_MSG_RESULT($attr_name) ++ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then ++ AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, ++ [Define to necessary symbol if this constant ++ uses a non-standard name on your system.]) ++ fi ++ ++ AC_MSG_CHECKING([if more special flags are required for pthreads]) ++ flag=no ++ case "${host_cpu}-${host_os}" in ++ *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; ++ *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; ++ esac ++ AC_MSG_RESULT(${flag}) ++ if test "x$flag" != xno; then ++ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" ++ fi ++ ++ LIBS="$save_LIBS" ++ CFLAGS="$save_CFLAGS" ++ ++ # More AIX lossage: must compile with cc_r ++ AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) ++else ++ PTHREAD_CC="$CC" ++fi ++ ++AC_SUBST(PTHREAD_LIBS) ++AC_SUBST(PTHREAD_CFLAGS) ++AC_SUBST(PTHREAD_CC) ++ ++# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: ++if test x"$acx_pthread_ok" = xyes; then ++ ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) ++ : ++else ++ acx_pthread_ok=no ++ $2 ++fi ++AC_LANG_RESTORE ++])dnl ACX_PTHREAD +diff --git b/m4/ost_posix.m4 a/m4/ost_posix.m4 +new file mode 100644 +index 0000000..6572b1e +--- /dev/null ++++ a/m4/ost_posix.m4 +@@ -0,0 +1,87 @@ ++dnl Copyright (C) 1999-2001 Open Source Telecom Corporation. ++dnl ++dnl This program is free software; you can redistribute it and/or modify ++dnl it under the terms of the GNU General Public License as published by ++dnl the Free Software Foundation; either version 2 of the License, or ++dnl (at your option) any later version. ++dnl ++dnl This program is distributed in the hope that it will be useful, ++dnl but WITHOUT ANY WARRANTY; without even the implied warranty of ++dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++dnl GNU General Public License for more details. ++dnl ++dnl You should have received a copy of the GNU General Public License ++dnl along with this program; if not, write to the Free Software ++dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++dnl ++dnl As a special exception to the GNU General Public License, if you ++dnl distribute this file as part of a program that contains a configuration ++dnl script generated by Autoconf, you may include it under the same ++dnl distribution terms that you use for the rest of that program. ++ ++AC_DEFUN(OST_SYS_POSIX,[ ++ AC_REQUIRE([OST_PROG_CC_POSIX]) ++ AC_CACHE_CHECK(whether system meets Posix.1, ++ ost_cv_sys_posix1, ++ AC_TRY_COMPILE([ ++ #include ++ #include ++ ],[ ++ #ifndef _POSIX_VERSION ++ fatal ++ #endif ++ ], ++ ost_cv_sys_posix1=yes, ++ ost_cv_sys_posix1=no ++ ) ++ ) ++ if test $ost_cv_sys_posix1 = no ; then ++ AC_CHECK_HEADERS(unistd.h) ++ else ++ AC_DEFINE(HAVE_UNISTD_H, [1], [have unix header]) ++ fi ++ AC_CHECK_HEADERS(features.h) ++ AH_TOP([ ++/* hack for BROKEN autoheader, since it will not predicitably order ++ macros by any obvious means. */ ++ ++#undef HAVE_UNISTD_H ++#undef HAVE_FEATURES_H ++#undef HAVE_SYS_TYPES_H ++ ++#ifdef HAVE_UNISTD_H ++#include ++#endif ++ ++#ifndef WIN32 ++#ifdef HAVE_FEATURES_H ++#include ++#endif ++#endif ++ ++#ifdef HAVE_SYS_TYPES_H ++#include ++#endif ++ ]) ++]) ++ ++AC_DEFUN(OST_CC_FCNTL,[ ++ AC_REQUIRE([OST_SYS_POSIX]) ++ AC_CHECK_HEADERS(fcntl.h sys/fcntl.h) ++AH_BOTTOM([ ++ ++#ifndef HAVE_FCNTL_H ++#ifdef HAVE_SYS_FCNTL_H ++#include ++#endif ++#else ++#include ++#ifndef O_NDELAY ++#ifdef HAVE_SYS_FCNTL_H ++#include ++#endif ++#endif ++#endif ++ ]) ++]) ++ +diff --git b/m4/ost_prog.m4 a/m4/ost_prog.m4 +new file mode 100644 +index 0000000..c9e66f5 +--- /dev/null ++++ a/m4/ost_prog.m4 +@@ -0,0 +1,61 @@ ++dnl Copyright (C) 1999-2001 Open Source Telecom Corporation. ++dnl ++dnl This program is free software; you can redistribute it and/or modify ++dnl it under the terms of the GNU General Public License as published by ++dnl the Free Software Foundation; either version 2 of the License, or ++dnl (at your option) any later version. ++dnl ++dnl This program is distributed in the hope that it will be useful, ++dnl but WITHOUT ANY WARRANTY; without even the implied warranty of ++dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++dnl GNU General Public License for more details. ++dnl ++dnl You should have received a copy of the GNU General Public License ++dnl along with this program; if not, write to the Free Software ++dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++dnl ++dnl As a special exception to the GNU General Public License, if you ++dnl distribute this file as part of a program that contains a configuration ++dnl script generated by Autoconf, you may include it under the same ++dnl distribution terms that you use for the rest of that program. ++ ++AC_DEFUN(OST_PROG_CC_POSIX,[ ++ AC_PROG_CC ++ AC_PROG_CPP ++ AC_ISC_POSIX] ++) ++ ++AC_DEFUN(OST_PROG_COMMON,[ ++ AC_REQUIRE([AC_PROG_INSTALL]) ++ AC_REQUIRE([AC_PROG_MAKE_SET]) ++]) ++ ++AC_DEFUN(OST_PROJ_LIBRARY,[ ++ AC_REQUIRE([AM_PROG_LIBTOOL]) ++ AC_REQUIRE([AC_PROG_RANLIB]) ++ if test ! -z "[$2]" ; then ++ if test ! -z "[$3]" ; then ++ LT_[$1]_VERSION="-version-info [$3] -release [$2]" ++ else ++ LT_[$1]_VERSION="-release [$2]" ++ fi ++ AC_SUBST(LT_[$1]_VERSION) ++ fi ++]) ++ ++AC_DEFUN(OST_PROG_LIBVER,[ ++ LT_MAJOR="`echo $LT_VERSION | sed s/:.*$//`" ++ AC_SUBST(LT_RELEASE) ++ AC_SUBST(LT_MAJOR) ++]) ++ ++ ++AC_DEFUN(OST_PROG_LIBRARY,[ ++ AC_REQUIRE([AM_PROG_LIBTOOL]) ++ AC_REQUIRE([AC_PROG_RANLIB]) ++ if test ! -z "[$2]" ; then ++ LT_[$1]_VERSION="-version-info [$2]" ++ AC_SUBST(LT_[$1]_VERSION) ++ fi ++]) ++ +diff --git b/m4/ost_pthread.m4 a/m4/ost_pthread.m4 +new file mode 100644 +index 0000000..d427c73 +--- /dev/null ++++ a/m4/ost_pthread.m4 +@@ -0,0 +1,582 @@ ++dnl Copyright (C) 1999-2001 Open Source Telecom Corporation. ++dnl ++dnl This program is free software; you can redistribute it and/or modify ++dnl it under the terms of the GNU General Public License as published by ++dnl the Free Software Foundation; either version 2 of the License, or ++dnl (at your option) any later version. ++dnl ++dnl This program is distributed in the hope that it will be useful, ++dnl but WITHOUT ANY WARRANTY; without even the implied warranty of ++dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++dnl GNU General Public License for more details. ++dnl ++dnl You should have received a copy of the GNU General Public License ++dnl along with this program; if not, write to the Free Software ++dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++dnl ++dnl As a special exception to the GNU General Public License, if you ++dnl distribute this file as part of a program that contains a configuration ++dnl script generated by Autoconf, you may include it under the same ++dnl distribution terms that you use for the rest of that program. ++ ++AC_DEFUN([OST_LIB_PTHREAD], ++[ ++ AC_REQUIRE([OST_SYS_POSIX]) ++ AC_REQUIRE([OST_CC_SYSTIME]) ++ THREAD_FLAGS="" ++ THREAD_LIBS="" ++ ost_cv_thread_library="none" ++ ost_cv_rt_library="none" ++ ost_cv_cxx_mode=false ++ ++ AC_ARG_WITH(pthread, [ --with-pthread[=lib] using specified pthread library], ++ [if test "$withval" != "" ; then ost_cv_thread_library=$withval ; fi] ++ ) ++ ++ AC_ARG_WITH(linuxthreads, [ --with-linuxthreads use linux kernel mode library], ++ [ost_cv_thread_library=lthread ++ AC_DEFINE(WITH_LINUXTHREADS, [1], [bsd system using linuxthreads]) ++ if test "$withval" != "yes" ; then ++ THREAD_FLAGS="-D__USE_GNU -D__USE_UNIX98 -I$withval $THREAD_FLAGS" ++ CFLAGS="-D__USE_GNU -D__USE_UNIX98 -I$withval $CFLAGS" ++ else ++ THREAD_FLAGS="-D__USE_GNU -D__USE_UNIX98 -I/usr/local/include/pthread/linuxthreads $THREAD_FLAGS" ++ CFLAGS="-D__USE_GNU -D__USE_UNIX98 -I/usr/local/include/pthread/linuxthreads $CFLAGS" ++ fi ++ ]) ++ ++ AC_CHECK_HEADERS(pthread.h, [ ++ AC_DEFINE(HAVE_PTHREAD_H, [1], [posix thread header]) ++ ost_cv_posix_threads=yes], ++ ost_cv_posix_threads=no) ++ ++ if test $ost_cv_posix_threads = no ; then ++ AC_LANG_SAVE ++ AC_LANG_CPLUSPLUS ++ SAVE_CXXFLAGS="$CXXFLAGS" ++ CXXFLAGS="$CXXFLAGS -pthread" ++ AC_TRY_COMPILE([#include ],[], ++ AC_DEFINE(HAVE_PTHREAD_H, [1]) ++ ost_cv_cxx_mode=true ++ ost_cv_posix_threads=yes) ++ CXXFLAGS="$SAVE_CXXFLAGS" ++ AC_LANG_RESTORE ++ fi ++ ++AC_LANG_SAVE ++AC_LANG_CPLUSPLUS ++ ++ ost_cv_posix_atomic=no ++ AC_CHECK_HEADERS(sys/atomic_op.h,[ ++ AC_DEFINE(HAVE_ATOMIC_AIX, [1], [atomic aix operations]) ++ ]) ++ AC_CHECK_HEADERS([sys/atomic.h], ++ ost_cv_posix_sys_atomic=yes, ++ ost_cv_posix_sys_atomic=no) ++ if test $ost_cv_posix_sys_atomic = yes ; then ++ AC_MSG_CHECKING([for atomic_t]) ++ AC_TRY_COMPILE([#include ], ++ [ ++ atomic_t at; at.counter = 1; ++ atomic_dec_and_test(&at); ++ atomic_sub(4, &at); ++ atomic_inc(&at); ++ atomic_add(3, &at); ++ ], ++ [ost_cv_posix_atomic=yes ++ AC_DEFINE(HAVE_WORKING_SYS_ATOMIC_H, [1], [has usable atomic functions])], ++ [ost_cv_posix_atomic=no]) ++ AC_MSG_RESULT($ost_cv_posix_atomic) ++ fi ++ ++ dnl check for gcc's bits/atomicity and the atomic functions therein ++ AC_CHECK_HEADERS([bits/atomicity.h], ++ ost_cv_bits_atomicity=yes, ++ ost_cv_bits_atomicity=no) ++ if test $ost_cv_bits_atomicity = yes ; then ++ AC_MSG_CHECKING([for _Atomic_word]) ++ AC_TRY_COMPILE([#include ], ++ [ ++ _Atomic_word i = 0; ++ __atomic_add(&i, 1); ++ __exchange_and_add(&i, 1); ++ ], ++ [ost_cv_gcc_atomic=yes ++ AC_DEFINE(HAVE_GCC_BITS_ATOMIC, [1], [has gcc atomic functions])], ++ [ost_cv_gcc_atomic=no]) ++ AC_MSG_RESULT($ost_cv_gcc_atomic) ++ ++ AC_MSG_CHECKING([for __gnu_cxx::_Atomic_word]) ++ AC_TRY_COMPILE([#include ], ++ [ ++ using namespace __gnu_cxx; ++ _Atomic_word i = 0; ++ __atomic_add(&i, 1); ++ __exchange_and_add(&i, 1); ++ ], ++ [ost_cv_gcc_cxx_atomic=yes ++ AC_DEFINE(HAVE_GCC_CXX_BITS_ATOMIC, [1], ++ [has __gnu_cxx atomic functions])], ++ [ost_cv_gcc_cxx_atomic=no]) ++ AC_MSG_RESULT($ost_cv_gcc_cxx_atomic) ++ fi ++ ++AC_LANG_RESTORE ++ ++ if test "$target" = NONE ; then ++ targetdir="" ++ else ++ targetdir="$target" ++ fi ++ ++ AC_CHECK_HEADERS(thread.h) ++ if test "$prefix" = NONE ; then ++ thrprefix="/usr/$targetdir/include" ++ if test -d /usr/$targetdir/sys-include ; then ++ thrprefix="$prefix/$targetdir/sys-include" ; fi ++ else ++ thrprefix="$prefix/$targetdir/include" ++ if test -d "$prefix/$targetdir/sys-include" ; then ++ thrprefix="$prefix/$targetdir/sys-include" ; fi ++ fi ++ ++ if test ! -f $thrprefix/thread.h ; then ++ thrprefix=/usr/include ++ fi ++ ++ AC_SUBST(thrprefix) ++ ++ if test $ost_cv_posix_threads = yes ; then ++ if test "$ost_cv_thread_library" = "none" ; then ++ ++ ost_cv_thread_flags="" ++ for flags in -kthread -pthread -mthreads -pthreads -Kthread --threadsafe -mt ; do ++ ++ AC_MSG_CHECKING(whether ${CC-cc} accepts $flags) ++ echo 'void f(){}' >conftest.c ++ if test -z "`${CC-cc} $flags -c conftest.c 2>&1`"; then ++ ost_cv_thread_flags=$flags ++ AC_MSG_RESULT(yes) ++ else ++ AC_MSG_RESULT(no) ++ fi ++ rm -f conftest* ++ if test ! -z "$ost_cv_thread_flags" ; then break ; fi ++ done ++# if test "$ost_cv_prog_cc_pthread" = "no" ; then ++# AC_CACHE_CHECK(whether ${CC-cc} accepts -mthreads, ++# ost_cv_prog_cc_mthreads, ++# [echo 'void f(){}' >conftest.c ++# if test -z "`${CC-cc} -mthreads -c conftest.c 2>&1`"; then ++# ost_cv_prog_cc_mthreads=yes ++# else ++# ost_cv_prog_cc_mthreads=no ++# fi ++# rm -f conftest* ++# ]) ++# fi ++ ost_cv_thread_library=none ++ AC_CHECK_LIB(pthread, pthread_self, ++ ost_cv_thread_library=pthread, ++ AC_CHECK_LIB(c_r, pthread_self, ++ ost_cv_thread_library=c_r, ++ AC_CHECK_LIB(pthread, pthread_kill, ++ ost_cv_thread_library=pthread, ++ AC_CHECK_LIB(pthreads, pthread_self, ++ ost_cv_thread_library=pthreads, ++ AC_CHECK_LIB(thread, pthread_self, ++ ost_cv_thread_library=thread))))) ++ ++ if test $ost_cv_thread_library = none ; then ++ AC_CHECK_LIB(gthreads, pthread_self,[ ++ AC_CHECK_LIB(malloc, malloc) ++ ost_cv_thread_library=gthreads]) ++ fi ++ if test $ost_cv_thread_library = none ; then ++ AC_CHECK_LIB(cma, pthread_self, ++ ost_cv_thread_library=cma) ++ fi ++ ++ if test $ost_cv_thread_library = none ; then ++ AC_CHECK_LIB(c, pthread_self, ++ ost_cv_thread_library=c) ++ fi ++ ++ if test $ost_cv_thread_library = none ; then ++ AC_MSG_ERROR(no library for posix threads found!) ++ fi ++ else ++# ost_cv_prog_cc_pthread=no ++# ost_cv_prog_cc_mthreads=no ++ ost_cv_thread_flags="" ++ fi ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mach_thread_np, ++ AC_DEFINE(HAVE_PTHREAD_MACH_THREAD_NP, [1], [has mach link]) ++ ) ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, nanosleep, ++ AC_DEFINE(HAVE_PTHREAD_NANOSLEEP, [1], [has nanosleep]),[ ++ AC_CHECK_LIB(posix4, nanosleep,[ ++ AC_DEFINE(HAVE_PTHREAD_NANOSLEEP, [1]) ++ THREAD_LIBS="$THREAD_LIBS -lposix4" ++ ],[ ++ AC_CHECK_LIB(rt, nanosleep,[ ++ AC_DEFINE(HAVE_PTHREAD_NANOSLEEP, [1]) ++ ost_cv_rt_library="-lrt"]) ++ ]) ++ ++ ]) ++ ++ AC_CHECK_LIB(rt, clock_gettime,[ ++ ost_cv_rt_library="-lrt" ++ AC_DEFINE(HAVE_HIRES_TIMER, [1], [have hires]) ++ ],[ ++ AC_CHECK_FUNCS(clock_gettime,[ ++ AC_DEFINE(HAVE_HIRES_TIMER, [1], [have hires]) ++ ]) ++ ]) ++ ++ AC_CHECK_LIB(rt, mlockall,[ ++ AC_DEFINE(HAVE_MLOCK, [1], [have mlock]) ++ AC_DEFINE(HAVE_MLOCKALL, [1], [have memlockall]) ++ ost_cv_rt_library="-lrt"], ++ [ ++ AC_CHECK_FUNCS(mlock) ++ AC_CHECK_FUNCS(mlockall) ++ ]) ++ ++ if test "$ost_cv_rt_library" != "none" ; then ++ THREAD_LIBS="$THREAD_LIBS $ost_cv_rt_library" ; fi ++ ++ if test ! -z "$ost_cv_thread_flags" ; then ++ THREAD_LIBS="$THREAD_LIBS $ost_cv_thread_flags" ++ else ++ THREAD_LIBS="$THREAD_LIBS -l$ost_cv_thread_library" ++ fi ++ ++ AC_MSG_CHECKING([if more special flags are required for pthreads]) ++ flag=no ++ case "${host_cpu}-${host_os}" in ++ *-aix* | *-freebsd*) flag="-D_THREAD_SAFE";; ++ *solaris* | alpha*-osf*) flag="-D_REENTRANT";; ++ esac ++ AC_MSG_RESULT(${flag}) ++ if test "x$flag" != xno; then ++ THREAD_FLAGS="$flag" ++ fi ++ ++ AC_SUBST(THREAD_FLAGS) ++ AC_SUBST(THREAD_LIBS) ++# LIBS="$THREAD_LIBS $LIBS" ++ if test "$ost_cv_thread_library" != "lthread" ; then ++ AC_CHECK_HEADERS(pthread_np.h) ++ fi ++ AC_CHECK_HEADERS(semaphore.h) ++ AC_CHECK_HEADERS(sched.h) ++ AC_CHECK_HEADERS(sys/sched.h) ++ AC_CHECK_FUNCS(sched_getscheduler) ++ AC_CACHE_CHECK([for recursive mutex type support], ost_cv_mutex_recursive, ++ [ ++ ost_cv_mutex_recursive="none" ++ ++ if test "$ost_cv_cxx_mode" = true ; then ++ AC_LANG_SAVE ++ AC_LANG_CPLUSPLUS ++ SAVE_CXXFLAGS="$CXXFLAGS" ++ CXXFLAGS="$CXXFLAGS -pthread" ++ fi ++ ++ AC_TRY_COMPILE( ++ [#include ], ++ [ ++ #ifndef PTHREAD_MUTEXTYPE_RECURSIVE ++ #ifdef PTHREAD_MUTEX_RECURSIVE ++ #define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEX_RECURSIVE ++ #endif ++ #endif ++ return (int)PTHREAD_MUTEXTYPE_RECURSIVE; ++ ], ++ ost_cv_mutex_recursive="portable", ++ [ ++ AC_EGREP_HEADER(PTHREAD_MUTEXTYPE_RECURSIVE_NP,pthread.h, ++ ost_cv_mutex_recursive=non-portable) ++ AC_EGREP_HEADER(PTHREAD_MUTEX_RECURSIVE_INITIALIZER_NP, pthread.h, ++ ost_cv_mutex_recursive=lthread) ++ AC_EGREP_HEADER(PTHREAD_MUTEX_RECURSIVE_NP,pthread.h, ++ ost_cv_mutex_recursive=linux) ++ AC_EGREP_HEADER(MUTEX_TYPE_COUNTING_FAST,pthread.h, ++ ost_cv_mutex_recursive=counting) ++ ]) ++ if test $ost_cv_mutex_recursive = "none" ; then ++ if test $ost_cv_thread_library = "lthread" ; then ++ ost_cv_mutex_recursive=linux ++ fi ++ fi ++ rm -f conftest* ++ ]) ++ ++ if test $ost_cv_mutex_recursive = "none" ; then ++ AC_TRY_COMPILE( ++ [#include ], ++ [return MUTEX_TYPE_COUNTING_FAST;], ++ ost_cv_mutex_recursive=counting) ++ fi ++ ++ if test "$ost_cv_cxx_mode" = true ; then ++ CXXFLAGS="$SAVE_CXXFLAGS" ++ AC_LANG_RESTORE ++ fi ++ ++ ++ case $ost_cv_mutex_recursive in ++ non-portable) ++ AC_DEFINE(PTHREAD_MUTEXTYPE_RECURSIVE, ++ PTHREAD_MUTEXTYPE_RECURSIVE_NP, [mutex type]) ++ ;; ++ linux) ++ AC_DEFINE(PTHREAD_MUTEXTYPE_RECURSIVE, ++ PTHREAD_MUTEX_RECURSIVE_NP) ++ ;; ++ counting) ++ AC_DEFINE(PTHREAD_MUTEXTYPE_RECURSIVE, ++ MUTEX_TYPE_COUNTING_FAST) ++ ;; ++ esac ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mutexattr_settype, ++ AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETTYPE, [1], [has setttype]), ++ [ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mutexattr_settype_np, ++ AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETTYPE_NP, ++ [1], [has non portable settype])) ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_mutexattr_setkind_np, ++ AC_DEFINE(HAVE_PTHREAD_MUTEXATTR_SETKIND_NP, ++ [1], [has non portable setkind])) ++ ] ++ ) ++ ++ ost_cv_thread_rwlock=false ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_rwlock_init,[ ++ ost_cv_thread_rwlock=true ++ AC_DEFINE(HAVE_PTHREAD_RWLOCK, [1], [has rwlock support])]) ++ ++ AC_CHECK_LIB(c, pread,[ ++ AC_DEFINE(HAVE_PREAD_PWRITE, [1], [has pwrite])],[ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pread,[ ++ AC_DEFINE(HAVE_PREAD_PWRITE, [1])],[ ++ AC_CHECK_LIB(c_r, pread,[AC_DEFINE(HAVE_PREAD_PWRITE)]) ++ ]) ++ ]) ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_suspend, ++ AC_DEFINE(HAVE_PTHREAD_SUSPEND, [1], [has suspend])) ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_attr_setstacksize, ++ AC_DEFINE(HAVE_PTHREAD_ATTR_SETSTACKSIZE, [1], [has stack size])) ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_yield_np, ++ AC_DEFINE(HAVE_PTHREAD_YIELD_NP, [1], [has np yield]),[ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_yield, ++ AC_DEFINE(HAVE_PTHREAD_YIELD, [1], [has yield]),[ ++ AC_CHECK_LIB(${ost_cv_thread_library}, sched_yield, ++ AC_DEFINE(HAVE_PTHREAD_SCHED_YIELD, [1], [has sched yield])) ++ ]) ++ ]) ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_cancel,[ ++ AC_DEFINE(HAVE_PTHREAD_CANCEL, [1], [has cancel]) ++ AC_CHECK_LIB(${ost_cv_thread_library}, ++ pthread_setcanceltype, ++ AC_DEFINE(HAVE_PTHREAD_SETCANCELTYPE, [1], [has setcanceltype]), ++ AC_CHECK_LIB($ost_cv_thread_library, pthread_setcanel, ++ AC_DEFINE(HAVE_PTHREAD_SETCANCEL, [1], [has setcancel]))) ++ ],[ ++ AC_CHECK_LIB(${ost_cv_thread_library}, ++ pthread_setcanceltype,[ ++ AC_DEFINE(HAVE_PTHREAD_CANCEL) ++ AC_DEFINE(HAVE_PTHREAD_SETCANCELTYPE)]) ++ ++ ]) ++ ++ AC_CHECK_LIB(${ost_cv_thread_library}, pthread_delay_np, ++ AC_DEFINE(HAVE_PTHREAD_DELAY_NP, [1], [has non portable delay])) ++ ++ fi ++ ++ UNAME=`uname` ++ if test "$UNAME" = "AIX" ; then ++ AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC}) ++ CC=$PTHREAD_CC ++ AC_DEFINE(COMMON_AIX_FIXES, [1], [aix fixes needed]) ++ fi ++ ++AH_BOTTOM([ ++#ifdef HAVE_THREAD_H ++#include "@thrprefix@/thread.h" ++#if defined(i386) && defined(__svr4__) && !defined(__sun) ++#define _THR_UNIXWARE ++#endif ++#if defined(__SVR4) && defined(__sun) ++#define _THR_SUNOS5 ++#else ++#if defined(__SVR4__) && defined(__SUN__) ++#define _THR_SUNOS5 ++#endif ++#endif ++#endif ++ ++#ifdef HAVE_WORKING_SYS_ATOMIC_H ++#include ++#define HAVE_ATOMIC ++#elif defined(HAVE_ATOMIC_AIX) ++#include ++#ifndef HAVE_ATOMIC ++#define HAVE_ATOMIC ++#endif ++#endif ++ ++#if defined(__cplusplus) ++#if defined(HAVE_GCC_BITS_ATOMIC) || defined(HAVE_GCC_CXX_BITS_ATOMIC) ++#include ++#define HAVE_ATOMIC ++#endif ++#endif ++ ++#if defined(HAVE_PTHREAD_H) && ( defined(_THREAD_SAFE) || defined(_REENTRANT) ) ++ ++#ifdef __QNX__ ++#define __EXT_QNX ++#endif ++ ++#include ++ ++#ifdef HAVE_PTHREAD_NP_H ++#include ++#endif ++ ++#ifdef HAVE_SEMAPHORE_H ++#include ++#endif ++#ifdef _POSIX_PRIORITY_SCHEDULING ++#ifdef HAVE_SCHED_H ++#include ++#else ++#ifdef HAVE_SYS_SCHED_H ++#include ++#endif ++#endif ++#endif ++ ++#define __PTHREAD_H__ ++#ifndef PTHREAD_MUTEXTYPE_RECURSIVE ++#ifdef MUTEX_TYPE_COUNTING_FAST ++#define PTHREAD_MUTEXTYPE_RECURSIVE MUTEX_TYPE_COUNTING_FAST ++#endif ++#endif ++#ifndef PTHREAD_MUTEXTYPE_RECURSIVE ++#ifdef PTHREAD_MUTEX_RECURSIVE ++#define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEX_RECURSIVE ++#endif ++#endif ++#ifndef HAVE_PTHREAD_MUTEXATTR_SETTYPE ++#if HAVE_PTHREAD_MUTEXATTR_SETKIND_NP ++#ifndef PTHREAD_MUTEXTYPE_RECURSIVE ++#define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP ++#endif ++#define pthread_mutexattr_gettype(x, y) pthread_mutexattr_getkind_np(x, y) ++#define pthread_mutexattr_settype(x, y) pthread_mutexattr_setkind_np(x, y) ++#endif ++#if HAVE_PTHREAD_MUTEXATTR_SETTYPE_NP ++#ifndef PTHREAD_MUTEXTYPE_RECURSIVE ++#define PTHREAD_MUTEXTYPE_RECURSIVE PTHREAD_MUTEXTYPE_RECURSIVE_NP ++#endif ++#define pthread_mutexattr_settype(x, y) pthread_mutexattr_settype_np(x, y) ++#define pthread_mutexattr_gettype(x, y) pthread_mutexattr_gettype_np(x, y) ++#endif ++#endif ++ ++#ifdef HAVE_PTHREAD_MACH_THREAD_NP ++#define _THR_MACH ++#endif ++ ++#ifndef HAVE_PTHREAD_YIELD ++#ifdef HAVE_PTHREAD_YIELD_NP ++#define pthread_yield() pthread_yield_np() ++#define HAVE_PTHREAD_YIELD ++#endif ++#endif ++ ++#ifndef HAVE_PTHREAD_YIELD ++#ifdef HAVE_PTHREAD_SCHED_YIELD ++#define pthread_yield() sched_yield() ++#define HAVE_PTHREAD_YIELD ++#endif ++#endif ++ ++#ifndef HAVE_PTHREAD_DELAY ++#ifdef HAVE_PTHREAD_DELAY_NP ++#define HAVE_PTHREAD_DELAY ++#define pthread_delay(x) pthread_delay_np(x) ++#endif ++#if defined(HAVE_PTHREAD_NANOSLEEP) ++#ifndef HAVE_PTHREAD_DELAY ++#define HAVE_PTHREAD_DELAY ++#ifdef __FreeBSD__ ++#ifdef __cplusplus ++extern "C" int nanosleep(const struct timespec *rqtp, struct timespec *rmtp); ++#endif ++#endif ++#define pthread_delay(x) nanosleep(x, NULL) ++#endif ++#endif ++#endif ++ ++#ifdef HAVE_PTHREAD_ATTR_SETSTACK ++#ifndef PTHREAD_STACK_MIN ++#define PTHREAD_STACK_MIN 32768 ++#endif ++#endif ++ ++#ifndef HAVE_PTHREAD_CANCEL ++#ifdef SIGCANCEL ++#define CCXX_SIG_THREAD_CANCEL SIGCANCEL ++#else ++#define CCXX_SIG_THREAD_CANCEL SIGQUIT ++#endif ++#define pthread_cancel(x) pthread_kill(x, CCXX_SIG_THREAD_CANCEL) ++#define pthread_setcanceltype(x, y) ++#define pthread_setcancelstate(x, y) ++#endif ++ ++#ifndef HAVE_PTHREAD_SETCANCELTYPE ++#ifdef HAVE_PTHREAD_SETCANCEL ++enum ++{ PTHREAD_CANCEL_ASYNCHRONOUS = CANCEL_ON, ++ PTHREAD_CANCEL_DEFERRED = CANCEL_OFF}; ++enum ++{ PTHREAD_CANCEL_ENABLE = CANCEL_ON, ++ PTHREAD_CANCEL_DISABLE = CANCEL_OFF}; ++#define pthread_setcancelstate(x, y) \ ++ (y == NULL) ? pthread_setcancel(x) : *y = pthread_setcancel ++#define pthread_setcanceltype(x, y) \ ++ (y == NULL) ? pthread_setasynccancel(x) | *y = pthread_setasynccancel(x) ++#else ++#define pthread_setcanceltype(x, y) ++#define pthread_setcancelstate(x, y) ++#endif ++#endif ++ ++#ifdef _AIX ++#ifdef HAVE_PTHREAD_SUSPEND ++#undef HAVE_PTHREAD_SUSPEND ++#endif ++#endif ++ ++#endif ++ ++ ++ ]) ++ ++]) ++ +diff --git b/m4/ost_systime.m4 a/m4/ost_systime.m4 +new file mode 100644 +index 0000000..f48f207 +--- /dev/null ++++ a/m4/ost_systime.m4 +@@ -0,0 +1,40 @@ ++dnl Copyright (C) 1999-2001 Open Source Telecom Corporation. ++dnl ++dnl This program is free software; you can redistribute it and/or modify ++dnl it under the terms of the GNU General Public License as published by ++dnl the Free Software Foundation; either version 2 of the License, or ++dnl (at your option) any later version. ++dnl ++dnl This program is distributed in the hope that it will be useful, ++dnl but WITHOUT ANY WARRANTY; without even the implied warranty of ++dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++dnl GNU General Public License for more details. ++dnl ++dnl You should have received a copy of the GNU General Public License ++dnl along with this program; if not, write to the Free Software ++dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++dnl ++dnl As a special exception to the GNU General Public License, if you ++dnl distribute this file as part of a program that contains a configuration ++dnl script generated by Autoconf, you may include it under the same ++dnl distribution terms that you use for the rest of that program. ++ ++AC_DEFUN(OST_CC_SYSTIME,[ ++ AC_HEADER_TIME ++ AC_CHECK_HEADERS(sys/time.h) ++AH_TOP([ ++#undef HAVE_SYS_TIME_H ++#if TIME_WITH_SYS_TIME ++#include ++#include ++#else ++#if HAVE_SYS_TIME_H ++#include ++#else ++#include ++#endif ++#endif ++ ]) ++ ++]) ++ + +commit 7b304172a261034b049b0bf4b41208eac54ebd90 +Author: vincent-richard +Date: Sun Oct 19 14:39:02 2008 +0000 + + Started version 0.9.1. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@482 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/ChangeLog b/ChangeLog +index 5162192..b9a510f 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,4 +1,12 @@ + ++VERSION 0.9.1svn ++================ ++ ++2008-10-19 Vincent Richard ++ ++ * Started version 0.9.1. ++ ++ + VERSION 0.9.0 + ============= + +diff --git a/SConstruct b/SConstruct +index 6014385..7f62876 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -29,7 +29,7 @@ import string + # Package version number + packageVersionMajor = 0 + packageVersionMinor = 9 +-packageVersionMicro = 0 ++packageVersionMicro = 1 + + # API version number (libtool) + # + +commit d0960f6bbb000849505e4fd47de1ab10c3a17627 +Author: vincent-richard +Date: Sun Nov 9 13:48:04 2008 +0000 + + Missing #include for GCC 4.4 (thanks to Martin Michlmayr). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@483 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index 4d063d4..e89b9ab 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -32,6 +32,7 @@ + + #include + ++#include + #include + + #include "vmime/exception.hpp" + +commit 9b74d48f383169f9269dbd6612e0b180f9f7119b +Author: vincent-richard +Date: Tue Dec 16 21:44:42 2008 +0000 + + Send CRLF in the same packet as command to avoid problems with some servers. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@484 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/smtp/SMTPTransport.cpp b/src/net/smtp/SMTPTransport.cpp +index 3ce8d21..5ad8d70 100644 +--- a/src/net/smtp/SMTPTransport.cpp ++++ b/src/net/smtp/SMTPTransport.cpp +@@ -617,8 +617,10 @@ void SMTPTransport::send(const mailbox& expeditor, const mailboxList& recipients + + void SMTPTransport::sendRequest(const string& buffer, const bool end) + { +- m_socket->send(buffer); +- if (end) m_socket->send("\r\n"); ++ if (end) ++ m_socket->send(buffer + "\r\n"); ++ else ++ m_socket->send(buffer); + } + + + +commit 72c169401644272043bbb4e536e13fbf9df494b2 +Author: vincent-richard +Date: Mon Dec 29 21:46:08 2008 +0000 + + Fixed week of year for 53th week (non ISO-compliant). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@485 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/utility/datetimeUtils.cpp b/src/utility/datetimeUtils.cpp +index ed9fb4b..cc06f50 100644 +--- a/src/utility/datetimeUtils.cpp ++++ b/src/utility/datetimeUtils.cpp +@@ -322,6 +322,9 @@ int datetimeUtils::getWeekOfYear(const int year, const int month, const int day) + WeekNumber -= 1; + } + ++ if (WeekNumber == 1 && month == 12) ++ WeekNumber = 53; ++ + return WeekNumber; + } + + +commit bf516d786e3af88e2663cb96ba7026f8fb9b09cb +Author: vincent-richard +Date: Fri Jan 9 21:07:42 2009 +0000 + + Fixed non-numeric timezone parsing (thanks to John van der Kamp, Zarafa). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@486 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/dateTime.cpp b/src/dateTime.cpp +index 3af6da7..66cd992 100644 +--- a/src/dateTime.cpp ++++ b/src/dateTime.cpp +@@ -427,7 +427,7 @@ void datetime::parse(const string& buffer, const string::size_type position, + zone[zoneLength++] = *p; + ++p; + } +- while (zoneLength < 3 && p < pend && parserHelpers::isDigit(*p)); ++ while (zoneLength < 3 && p < pend); + + switch (zone[0]) + { +@@ -491,6 +491,8 @@ void datetime::parse(const string& buffer, const string::size_type position, + + break; + } ++ case 'g': ++ case 'G': + case 'u': + case 'U': + { + +commit 248d19bf70b8b71e9cdb9f92a09f338289ff5b2a +Author: vincent-richard +Date: Sun Mar 1 21:23:40 2009 +0000 + + Use Decider() method instead of deprecated SourceSignatures/TargetSignatures(). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@487 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 7f62876..4bfddd8 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -439,9 +439,7 @@ EnsureSConsVersion(0, 94) + + SetOption('implicit_cache', 1) + +-#SourceSignatures('timestamp') +-SourceSignatures('MD5') +-TargetSignatures('build') ++Decider('MD5-timestamp') + + + ############# + +commit 0131dcb8198dc1253bf2b5e86709ff009f4fa448 +Author: vincent-richard +Date: Thu Apr 9 18:15:50 2009 +0000 + + Fixed block size through filtered streams. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@488 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/utility/filteredStream.cpp b/src/utility/filteredStream.cpp +index eda0c64..5db0104 100644 +--- a/src/utility/filteredStream.cpp ++++ b/src/utility/filteredStream.cpp +@@ -30,6 +30,22 @@ namespace vmime { + namespace utility { + + ++// filteredInputStream ++ ++stream::size_type filteredInputStream::getBlockSize() ++{ ++ return std::min(inputStream::getBlockSize(), getPreviousInputStream().getBlockSize()); ++} ++ ++ ++// filteredOutputStream ++ ++stream::size_type filteredOutputStream::getBlockSize() ++{ ++ return std::min(outputStream::getBlockSize(), getNextOutputStream().getBlockSize()); ++} ++ ++ + // dotFilteredInputStream + + dotFilteredInputStream::dotFilteredInputStream(inputStream& is) +diff --git a/src/utility/stream.cpp b/src/utility/stream.cpp +index bb5300e..8fbf337 100644 +--- a/src/utility/stream.cpp ++++ b/src/utility/stream.cpp +@@ -38,7 +38,7 @@ namespace utility { + + // stream + +-stream::size_type stream::getBlockSize() const ++stream::size_type stream::getBlockSize() + { + return 32768; // 32 KB + } +@@ -468,7 +468,7 @@ void outputStreamSocketAdapter::flush() + } + + +-stream::size_type outputStreamSocketAdapter::getBlockSize() const ++stream::size_type outputStreamSocketAdapter::getBlockSize() + { + return 16384; // 16 KB + } +@@ -511,7 +511,7 @@ stream::size_type inputStreamSocketAdapter::skip + } + + +-stream::size_type inputStreamSocketAdapter::getBlockSize() const ++stream::size_type inputStreamSocketAdapter::getBlockSize() + { + return 16384; // 16 KB + } +diff --git a/vmime/utility/filteredStream.hpp b/vmime/utility/filteredStream.hpp +index 9f64ba9..1e03697 100644 +--- a/vmime/utility/filteredStream.hpp ++++ b/vmime/utility/filteredStream.hpp +@@ -41,6 +41,8 @@ class filteredInputStream : public inputStream + { + public: + ++ virtual size_type getBlockSize(); ++ + /** Return a reference to the stream being filtered. + * + * @return stream being filtered +@@ -56,6 +58,8 @@ class filteredOutputStream : public outputStream + { + public: + ++ virtual size_type getBlockSize(); ++ + /** Return a reference to the stream being filtered. + * + * @return destination stream for filtered data +diff --git a/vmime/utility/stream.hpp b/vmime/utility/stream.hpp +index a9c079b..5f7bfa2 100644 +--- a/vmime/utility/stream.hpp ++++ b/vmime/utility/stream.hpp +@@ -77,7 +77,7 @@ public: + * + * @return block size, in bytes + */ +- virtual size_type getBlockSize() const; ++ virtual size_type getBlockSize(); + }; + + +@@ -239,6 +239,7 @@ public: + void write(const value_type* const data, const size_type count); + void flush(); + ++size_type getBlockSize(){return 8192;} + private: + + string& m_buffer; +@@ -402,7 +403,7 @@ public: + void write(const value_type* const data, const size_type count); + void flush(); + +- size_type getBlockSize() const; ++ size_type getBlockSize(); + + private: + +@@ -426,7 +427,7 @@ public: + size_type read(value_type* const data, const size_type count); + size_type skip(const size_type count); + +- size_type getBlockSize() const; ++ size_type getBlockSize(); + + private: + + +commit 11e0721c996957696f41f7450d4161fefad2f450 +Author: vincent-richard +Date: Thu Apr 9 20:24:08 2009 +0000 + + Fixed duplicate switch case on AIX (thanks to Robin Rawson-Tetley). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@489 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index e89b9ab..b371fe7 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -488,7 +488,9 @@ void posixFileSystemFactory::reportError(const vmime::utility::path& path, const + case ENOMEM: desc = "ENOMEM: insufficient kernel memory."; break; + case EMFILE: desc = "ENFILE: limit on number of files open by the process has been reached."; break; + case ENFILE: desc = "ENFILE: limit on number of files open on the system has been reached."; break; ++#ifndef AIX + case ENOTEMPTY: desc = "ENOTEMPTY: directory is not empty."; break; ++#endif + + default: + + +commit d5783e1bfc66a3632820379f4d3f45957469a260 +Author: vincent-richard +Date: Thu Apr 9 20:31:16 2009 +0000 + + Removed '-pipe' compiler flags, as it is not available on all platforms. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@490 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 4bfddd8..7ba1b27 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -590,7 +590,6 @@ env.Append(CPPPATH = [ '.' ]) + + env.Append(CPPDEFINES = ['_REENTRANT=1']) + +-env.Append(CXXFLAGS = ['-pipe']) + env.Append(CXXFLAGS = ['-W']) + env.Append(CXXFLAGS = ['-Wall']) + env.Append(CXXFLAGS = ['-ansi']) +@@ -1831,7 +1830,7 @@ EXTRA_CFLAGS="$EXTRA_CFLAGS $lt_prog_compiler_pic" + + """) + +- compilerFlags = [ '-pipe', '-ansi', '-pedantic', '-W', '-Wall', '-Wpointer-arith', '-Wold-style-cast', '-Wconversion' ] ++ compilerFlags = [ '-ansi', '-pedantic', '-W', '-Wall', '-Wpointer-arith', '-Wold-style-cast', '-Wconversion' ] + + for f in compilerFlags: + configure_in.write('# ' + f + '\n') + +commit 71398fc74b32da917bb7e8bc8b7d7c1dc79dd03c +Author: vincent-richard +Date: Fri May 1 17:11:20 2009 +0000 + + Fixed dynamic_cast support detection on HPUX (aCC). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@491 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 7ba1b27..2a01b61 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -1414,8 +1414,8 @@ AC_TRY_COMPILE( + AC_MSG_CHECKING([if C++ compiler supports dynamic_cast<> (required)]) + AC_TRY_COMPILE( + [ +- class foo { virtual ~foo() { } }; +- class bar : public foo { }; ++ class foo { public: virtual ~foo() { } }; ++ class bar : public foo { public: virtual ~bar() { } }; + ],[ + foo *c=0; + bar *c1=dynamic_cast(c); + +commit 72074634c0810f69abc92c312199263921c1a619 +Author: vincent-richard +Date: Sun Jun 21 20:57:03 2009 +0000 + + Check return status of fsync (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@492 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/AUTHORS b/AUTHORS +index da6f087..d252ee3 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -19,4 +19,5 @@ Other contributors: + - Benjamin Biron + - Bertrand Benoit + - Tim Teulings ++ - Georg Sauthoff + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index b371fe7..d04ebc2 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -126,7 +126,8 @@ void posixFileWriterOutputStream::write(const value_type* const data, const size + + void posixFileWriterOutputStream::flush() + { +- ::fsync(m_fd); ++ if (::fsync(m_fd) == -1) ++ posixFileSystemFactory::reportError(m_path, errno); + } + + + +commit 063e9acffbbdff0ba65b69e27492551a4370673c +Author: vincent-richard +Date: Sun Jun 21 21:05:16 2009 +0000 + + Added other missing return error checks for posix system calls; check consistent for -1 (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@493 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index d04ebc2..79da351 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -63,7 +63,10 @@ posixFileIterator::posixFileIterator(const vmime::utility::file::path& path, con + posixFileIterator::~posixFileIterator() + { + if (m_dir != NULL) +- ::closedir(m_dir); ++ { ++ if (::closedir(m_dir) == -1) ++ posixFileSystemFactory::reportError(m_path, errno); ++ } + } + + +@@ -86,6 +89,8 @@ ref posixFileIterator::nextElement() + + void posixFileIterator::getNextElement() + { ++ errno = 0; ++ + while ((m_dirEntry = ::readdir(m_dir)) != NULL) + { + const char* name = m_dirEntry->d_name; +@@ -97,6 +102,9 @@ void posixFileIterator::getNextElement() + break; + } + } ++ ++ if (errno) ++ posixFileSystemFactory::reportError(m_path, errno); + } + + +@@ -144,7 +152,8 @@ posixFileReaderInputStream::posixFileReaderInputStream(const vmime::utility::fil + + posixFileReaderInputStream::~posixFileReaderInputStream() + { +- ::close(m_fd); ++ if (::close(m_fd) == -1) ++ posixFileSystemFactory::reportError(m_path, errno); + } + + +@@ -156,7 +165,8 @@ bool posixFileReaderInputStream::eof() const + + void posixFileReaderInputStream::reset() + { +- ::lseek(m_fd, 0, SEEK_SET); ++ if (::lseek(m_fd, 0, SEEK_SET) == off_t(-1)) ++ posixFileSystemFactory::reportError(m_path, errno); + } + + +@@ -178,8 +188,15 @@ vmime::utility::stream::size_type posixFileReaderInputStream::read + vmime::utility::stream::size_type posixFileReaderInputStream::skip(const size_type count) + { + const off_t curPos = ::lseek(m_fd, 0, SEEK_CUR); ++ ++ if (curPos == off_t(-1)) ++ posixFileSystemFactory::reportError(m_path, errno); ++ + const off_t newPos = ::lseek(m_fd, count, SEEK_CUR); + ++ if (newPos == off_t(-1)) ++ posixFileSystemFactory::reportError(m_path, errno); ++ + return static_cast (newPos - curPos); + } + +@@ -246,7 +263,8 @@ void posixFile::createFile() + if ((fd = ::open(m_nativePath.c_str(), O_CREAT | O_EXCL | O_WRONLY, 0660)) == -1) + posixFileSystemFactory::reportError(m_path, errno); + +- ::close(fd); ++ if (::close(fd) == -1) ++ posixFileSystemFactory::reportError(m_path, errno); + } + + +@@ -259,32 +277,58 @@ void posixFile::createDirectory(const bool createAll) + bool posixFile::isFile() const + { + struct stat buf; +- return (::stat(m_nativePath.c_str(), &buf) == 0 && S_ISREG(buf.st_mode)); ++ ++ if (::stat(m_nativePath.c_str(), &buf) == -1) ++ { ++ posixFileSystemFactory::reportError(m_path, errno); ++ return false; ++ } ++ ++ return S_ISREG(buf.st_mode); + } + + + bool posixFile::isDirectory() const + { + struct stat buf; +- return (::stat(m_nativePath.c_str(), &buf) == 0 && S_ISDIR(buf.st_mode)); ++ ++ if (::stat(m_nativePath.c_str(), &buf) == -1) ++ { ++ posixFileSystemFactory::reportError(m_path, errno); ++ return false; ++ } ++ ++ return S_ISDIR(buf.st_mode); + } + + + bool posixFile::canRead() const + { + struct stat buf; +- return (::stat(m_nativePath.c_str(), &buf) == 0 && +- S_ISREG(buf.st_mode) && +- ::access(m_nativePath.c_str(), R_OK | F_OK) == 0); ++ ++ if (::stat(m_nativePath.c_str(), &buf) == -1) ++ { ++ posixFileSystemFactory::reportError(m_path, errno); ++ return false; ++ } ++ ++ return S_ISREG(buf.st_mode) && ++ ::access(m_nativePath.c_str(), R_OK | F_OK) == 0; + } + + + bool posixFile::canWrite() const + { + struct stat buf; +- return (::stat(m_nativePath.c_str(), &buf) == 0 && +- S_ISREG(buf.st_mode) && +- ::access(m_nativePath.c_str(), W_OK | F_OK) == 0); ++ ++ if (::stat(m_nativePath.c_str(), &buf) == -1) ++ { ++ posixFileSystemFactory::reportError(m_path, errno); ++ return false; ++ } ++ ++ return S_ISREG(buf.st_mode) && ++ ::access(m_nativePath.c_str(), W_OK | F_OK) == 0; + } + + +@@ -292,7 +336,7 @@ posixFile::length_type posixFile::getLength() + { + struct stat buf; + +- if (::stat(m_nativePath.c_str(), &buf) != 0) ++ if (::stat(m_nativePath.c_str(), &buf) == -1) + posixFileSystemFactory::reportError(m_path, errno); + + return static_cast (buf.st_size); +@@ -325,7 +369,7 @@ void posixFile::rename(const path& newName) + { + const vmime::string newNativePath = posixFileSystemFactory::pathToStringImpl(newName); + +- if (::rename(m_nativePath.c_str(), newNativePath.c_str()) != 0) ++ if (::rename(m_nativePath.c_str(), newNativePath.c_str()) == -1) + posixFileSystemFactory::reportError(m_path, errno); + + m_path = newName; +@@ -337,17 +381,17 @@ void posixFile::remove() + { + struct stat buf; + +- if (::stat(m_nativePath.c_str(), &buf) != 0) ++ if (::stat(m_nativePath.c_str(), &buf) == -1) + posixFileSystemFactory::reportError(m_path, errno); + + if (S_ISDIR(buf.st_mode)) + { +- if (::rmdir(m_nativePath.c_str()) != 0) ++ if (::rmdir(m_nativePath.c_str()) == -1) + posixFileSystemFactory::reportError(m_path, errno); + } + else if (S_ISREG(buf.st_mode)) + { +- if (::unlink(m_nativePath.c_str()) != 0) ++ if (::unlink(m_nativePath.c_str()) == -1) + posixFileSystemFactory::reportError(m_path, errno); + } + } +@@ -386,7 +430,7 @@ void posixFile::createDirectoryImpl(const vmime::utility::file::path& fullPath, + if (!path.isEmpty() && recursive) + createDirectoryImpl(fullPath, path.getParent(), true); + +- if (::mkdir(nativePath.c_str(), 0750) != 0) ++ if (::mkdir(nativePath.c_str(), 0750) == -1) + posixFileSystemFactory::reportError(fullPath, errno); + } + + +commit da3d98391ef7004969845593d583812d06d904e7 +Author: vincent-richard +Date: Sun Jun 21 21:07:35 2009 +0000 + + Changed posix write wrapper since a) write can be interrupted and b) write can write less than specified without error (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@494 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index 79da351..9b16d03 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -127,8 +127,29 @@ posixFileWriterOutputStream::~posixFileWriterOutputStream() + + void posixFileWriterOutputStream::write(const value_type* const data, const size_type count) + { +- if (::write(m_fd, data, count) == -1) +- posixFileSystemFactory::reportError(m_path, errno); ++ const value_type* array = data; ++ size_t size = count; ++ ++ while (1) ++ { ++ ssize_t ret = ::write(m_fd, array, size); ++ ++ if (ret == -1) ++ { ++ if (errno == EINTR) ++ continue; ++ ++ posixFileSystemFactory::reportError(m_path, errno); ++ break; ++ } ++ else if (size_t(ret) < size) ++ { ++ array += ret; ++ size -= ret; ++ } ++ ++ break; ++ } + } + + + +commit 33c37b2603fc3a0608fc75d2951408057d38ba60 +Author: vincent-richard +Date: Sun Jun 21 21:08:56 2009 +0000 + + Use ::flush() (aka fsync()) after a maildir message is written (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@495 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/maildir/maildirFolder.cpp b/src/net/maildir/maildirFolder.cpp +index 4f0acaf..9a52171 100644 +--- a/src/net/maildir/maildirFolder.cpp ++++ b/src/net/maildir/maildirFolder.cpp +@@ -945,6 +945,8 @@ void maildirFolder::copyMessageImpl(const utility::file::path& tmpDirPath, + if (progress) + progress->progress(total, size); + } ++ ++ os->flush(); + } + catch (exception& e) + { + +commit 58afd9dee9633c8e66eb9b9a4d781fdd5de402e9 +Author: vincent-richard +Date: Sun Jun 21 21:19:00 2009 +0000 + + Include hostname in message id (ensure unicity when working on a network file system). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@496 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/maildir/maildirUtils.cpp b/src/net/maildir/maildirUtils.cpp +index 67d52fe..13311a5 100644 +--- a/src/net/maildir/maildirUtils.cpp ++++ b/src/net/maildir/maildirUtils.cpp +@@ -25,6 +25,7 @@ + #include "vmime/net/maildir/maildirStore.hpp" + + #include "vmime/utility/random.hpp" ++#include "vmime/platform.hpp" + + #include "vmime/exception.hpp" + +@@ -153,6 +154,8 @@ const utility::file::path::component maildirUtils::generateId() + oss << utility::random::getProcess(); + oss << "."; + oss << utility::random::getString(6); ++ oss << "."; ++ oss << platform::getHandler()->getHostName(); + + return (utility::file::path::component(oss.str())); + } + +commit 184dacc1ff75195fa594a18fb697b80dd8e08e43 +Author: vincent-richard +Date: Sun Jun 21 21:32:25 2009 +0000 + + gnutls_x509_crt_list_import does not support multiple DER certificates (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@497 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/tls/TLSSocket.cpp b/src/net/tls/TLSSocket.cpp +index 73af1da..4f64967 100644 +--- a/src/net/tls/TLSSocket.cpp ++++ b/src/net/tls/TLSSocket.cpp +@@ -292,27 +292,26 @@ ref TLSSocket::getPeerCertificates() const + // Try X.509 + gnutls_x509_crt* x509Certs = new gnutls_x509_crt[certCount]; + +- unsigned int count = certCount; +- +- int res = gnutls_x509_crt_list_import +- (x509Certs, &count, rawData, GNUTLS_X509_FMT_PEM, 0); +- +- if (res <= 0) ++ for (unsigned int i = 0; i < certCount; ++i) + { +- count = certCount; ++ gnutls_x509_crt_init(x509Certs + i); + +- res = gnutls_x509_crt_list_import +- (x509Certs, &count, rawData, GNUTLS_X509_FMT_DER, 0); ++ int res = gnutls_x509_crt_import(x509Certs[i], rawData + i, ++ GNUTLS_X509_FMT_DER); ++ ++ if (res < 0) ++ { ++ // XXX more fine-grained error reporting? ++ delete [] x509Certs; ++ return NULL; ++ } + } + +- if (res >= 1) + { + std::vector > certs; + bool error = false; + +- count = static_cast (res); +- +- for (unsigned int i = 0 ; i < count ; ++i) ++ for (unsigned int i = 0 ; i < certCount ; ++i) + { + size_t dataSize = 0; + + +commit c0cec33b83284f8ad6112c63cea9c11f4c067e0c +Author: vincent-richard +Date: Sat Jul 11 12:21:59 2009 +0000 + + Ensure 'unsigned long' is 4 bytes long (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@498 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/security/digest/sha1/sha1MessageDigest.cpp b/src/security/digest/sha1/sha1MessageDigest.cpp +index a51e250..51eec6a 100644 +--- a/src/security/digest/sha1/sha1MessageDigest.cpp ++++ b/src/security/digest/sha1/sha1MessageDigest.cpp +@@ -27,6 +27,7 @@ + #include "vmime/security/digest/sha1/sha1MessageDigest.hpp" + + #include ++#include + + + namespace vmime { +@@ -161,8 +162,8 @@ void sha1MessageDigest::finalize() + i = j = 0; + + std::memset(m_buffer, 0, 64); +- std::memset(m_state, 0, 20); +- std::memset(m_count, 0, 8); ++ std::memset(m_state, 0, 5 * sizeof(unsigned long)); ++ std::memset(m_count, 0, 2 * sizeof(unsigned long)); + std::memset(&finalcount, 0, 8); + } + +@@ -201,6 +202,8 @@ void sha1MessageDigest::transform + unsigned long l[16]; + } CHAR64LONG16; + ++ assert(sizeof(unsigned long) == 4); ++ + CHAR64LONG16* block; + static unsigned char workspace[64]; + + +commit ab6295012905d625d8606408905c8e4bb63b0635 +Author: vincent-richard +Date: Sat Jul 11 12:31:18 2009 +0000 + + fsync() in posixFile::fileCreate(); changed posixFile::rename to exclusive semantics - if dst exists it fails (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@499 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index 9b16d03..2a1356a 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -284,6 +284,9 @@ void posixFile::createFile() + if ((fd = ::open(m_nativePath.c_str(), O_CREAT | O_EXCL | O_WRONLY, 0660)) == -1) + posixFileSystemFactory::reportError(m_path, errno); + ++ if (::fsync(fd) == -1) ++ posixFileSystemFactory::reportError(m_path, errno); ++ + if (::close(fd) == -1) + posixFileSystemFactory::reportError(m_path, errno); + } +@@ -390,6 +393,9 @@ void posixFile::rename(const path& newName) + { + const vmime::string newNativePath = posixFileSystemFactory::pathToStringImpl(newName); + ++ posixFile dest(newName); ++ dest.createFile(); ++ + if (::rename(m_nativePath.c_str(), newNativePath.c_str()) == -1) + posixFileSystemFactory::reportError(m_path, errno); + + +commit 37807bc97a51d0ef561c9102580b2dd12d66c08a +Author: vincent-richard +Date: Sat Jul 11 12:39:36 2009 +0000 + + maildirFolder::addMessage() : iff FLAG_RECENT is present, add message to 'new' instead of 'cur' (Georg Sauthoff). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@500 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/maildir/maildirFolder.cpp b/src/net/maildir/maildirFolder.cpp +index 9a52171..65abdcf 100644 +--- a/src/net/maildir/maildirFolder.cpp ++++ b/src/net/maildir/maildirFolder.cpp +@@ -835,9 +835,12 @@ void maildirFolder::addMessage(utility::inputStream& is, const int size, + utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); + + utility::file::path tmpDirPath = store->getFormat()-> +- folderPathToFileSystemPath(m_path, maildirFormat::TMP_DIRECTORY); +- utility::file::path curDirPath = store->getFormat()-> +- folderPathToFileSystemPath(m_path, maildirFormat::CUR_DIRECTORY); ++ folderPathToFileSystemPath(m_path,maildirFormat::TMP_DIRECTORY); ++ utility::file::path dstDirPath = store->getFormat()-> ++ folderPathToFileSystemPath(m_path, ++ flags == message::FLAG_RECENT ? ++ maildirFormat::NEW_DIRECTORY : ++ maildirFormat::CUR_DIRECTORY); + + const utility::file::path::component filename = + maildirUtils::buildFilename(maildirUtils::generateId(), +@@ -855,7 +858,7 @@ void maildirFolder::addMessage(utility::inputStream& is, const int size, + + try + { +- ref curDir = fsf->create(curDirPath); ++ ref curDir = fsf->create(dstDirPath); + curDir->createDirectory(true); + } + catch (exceptions::filesystem_exception&) +@@ -864,7 +867,7 @@ void maildirFolder::addMessage(utility::inputStream& is, const int size, + } + + // Actually add the message +- copyMessageImpl(tmpDirPath, curDirPath, filename, is, size, progress); ++ copyMessageImpl(tmpDirPath, dstDirPath, filename, is, size, progress); + + // Append the message to the cache list + messageInfos msgInfos; +@@ -910,7 +913,8 @@ void maildirFolder::addMessage(utility::inputStream& is, const int size, + + + void maildirFolder::copyMessageImpl(const utility::file::path& tmpDirPath, +- const utility::file::path& curDirPath, const utility::file::path::component& filename, ++ const utility::file::path& dstDirPath, ++ const utility::file::path::component& filename, + utility::inputStream& is, const utility::stream::size_type size, + utility::progressListener* progress) + { +@@ -970,7 +974,7 @@ void maildirFolder::copyMessageImpl(const utility::file::path& tmpDirPath, + // ...then, move it to 'cur' + try + { +- file->rename(curDirPath / filename); ++ file->rename(dstDirPath / filename); + } + catch (exception& e) + { +@@ -980,7 +984,8 @@ void maildirFolder::copyMessageImpl(const utility::file::path& tmpDirPath, + // Delete temporary file + try + { +- ref file = fsf->create(tmpDirPath / filename); ++ file->remove(); ++ ref file = fsf->create(dstDirPath / filename); + file->remove(); + } + catch (exceptions::filesystem_exception&) +diff --git a/src/net/maildir/maildirUtils.cpp b/src/net/maildir/maildirUtils.cpp +index 13311a5..bb2b69f 100644 +--- a/src/net/maildir/maildirUtils.cpp ++++ b/src/net/maildir/maildirUtils.cpp +@@ -129,18 +129,24 @@ const utility::file::path::component maildirUtils::buildFlags(const int flags) + const utility::file::path::component maildirUtils::buildFilename + (const utility::file::path::component& id, const int flags) + { +- return (buildFilename(id, buildFlags(flags))); ++ if (flags == message::FLAG_RECENT) ++ return id; ++ else ++ return (buildFilename(id, buildFlags(flags))); + } + + + const utility::file::path::component maildirUtils::buildFilename +- (const utility::file::path::component& id, const utility::file::path::component& flags) ++ (const utility::file::path::component& id, ++ const utility::file::path::component& flags) + { + #if VMIME_BUILTIN_PLATFORM_WINDOWS +- return (utility::path::component(id.getBuffer() + "-" + flags.getBuffer())); // use dash ++ static const char DELIMITER[] = "-"; + #else +- return (utility::path::component(id.getBuffer() + ":" + flags.getBuffer())); // use colon ++ static const char DELIMITER[] = ":"; + #endif ++ ++ return utility::path::component(id.getBuffer() + DELIMITER + flags.getBuffer()); + } + + + +commit 867808f0e40d69009755419d77f764d2224b8a78 +Author: vincent-richard +Date: Wed Aug 19 18:41:20 2009 +0000 + + Use pkg-config for gnutls 2.8.0 and later (thanks to Andreas Metzler). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@501 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 2a01b61..2e86832 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -1617,7 +1617,7 @@ AC_ARG_ENABLE(tls, + + if test "x$conf_tls" = "xyes"; then + # -- GNU TLS Library (http://www.gnu.org/software/gnutls/) +- AM_PATH_LIBGNUTLS(1.2.0, have_gnutls=yes, have_gnutls=no) ++ PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 1.2.0], have_gnutls=yes, have_gnutls=no) + + if test "x$have_gnutls" = "xyes"; then + AM_CONDITIONAL(VMIME_HAVE_TLS_SUPPORT, true) + +commit 0dc22247b059382321a3228bb07e0819596466d0 +Author: vincent-richard +Date: Sun Sep 6 12:02:10 2009 +0000 + + Relicensed VMime under the GNU GPL version 3. Changed copyright year to 2009. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@502 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/AUTHORS b/AUTHORS +index d252ee3..8391c18 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -1,17 +1,14 @@ + +-VMIME AUTHORS AND CONTRIBUTORS +-============================== ++VMIME AUTHOR ++============ + + Vincent Richard +-Project originator, design, core implementation. ++Project owner and creator. VMime was created in 1998, and publicly released ++under the GNU GPL license in 2003. + +-Pierre Thierry +-Patches for STL algorithms. + +-Zarafa +-Miscellaneous patches. +- +-Other contributors: ++VMIME CONTRIBUTORS ++================== + + - Stefan Uhrig + - Rafael Fernandez +@@ -20,4 +17,9 @@ Other contributors: + - Bertrand Benoit + - Tim Teulings + - Georg Sauthoff ++ - Pierre Thierry (patches for STL algorithms) ++ - Zarafa ++ ++Please apologize if I have forgotten someone here. ;) ++See SVN Changelog for full list. + +diff --git a/COPYING b/COPYING +index 5b6e7c6..94a9ed0 100644 +--- a/COPYING ++++ b/COPYING +@@ -1,285 +1,626 @@ +- GNU GENERAL PUBLIC LICENSE +- Version 2, June 1991 ++ GNU GENERAL PUBLIC LICENSE ++ Version 3, 29 June 2007 + +- Copyright (C) 1989, 1991 Free Software Foundation, Inc. +- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++ Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +- Preamble ++ 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 ++ The GNU General Public License is a free, copyleft license for ++software and other kinds of works. ++ ++ The licenses for most software and other practical works are designed ++to take away your freedom to share and change the works. By contrast, ++the GNU General Public License is intended to guarantee your freedom to ++share and change all versions of a program--to make sure it remains free ++software for all its users. We, the Free Software Foundation, use the ++GNU General Public License for most of our software; it applies also to ++any other work released this way by its authors. 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. ++them 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. ++ To protect your rights, we need to prevent others from denying you ++these rights or asking you to surrender the rights. Therefore, you have ++certain responsibilities if you distribute copies of the software, or if ++you modify it: responsibilities to respect the freedom of others. + + 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. ++gratis or for a fee, you must pass on to the recipients the same ++freedoms that you received. 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. ++ ++ Developers that use the GNU GPL protect your rights with two steps: ++(1) assert copyright on the software, and (2) offer you this License ++giving you legal permission to copy, distribute and/or modify it. ++ ++ For the developers' and authors' protection, the GPL clearly explains ++that there is no warranty for this free software. For both users' and ++authors' sake, the GPL requires that modified versions be marked as ++changed, so that their problems will not be attributed erroneously to ++authors of previous versions. ++ ++ Some devices are designed to deny users access to install or run ++modified versions of the software inside them, although the manufacturer ++can do so. This is fundamentally incompatible with the aim of ++protecting users' freedom to change the software. The systematic ++pattern of such abuse occurs in the area of products for individuals to ++use, which is precisely where it is most unacceptable. Therefore, we ++have designed this version of the GPL to prohibit the practice for those ++products. If such problems arise substantially in other domains, we ++stand ready to extend this provision to those domains in future versions ++of the GPL, as needed to protect the freedom of users. ++ ++ Finally, every program is threatened constantly by software patents. ++States should not allow patents to restrict development and use of ++software on general-purpose computers, but in those that do, we wish to ++avoid the special danger that patents applied to a free program could ++make it effectively proprietary. To prevent this, the GPL assures that ++patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and + modification follow. +- +- GNU GENERAL PUBLIC LICENSE +- 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 ++ ++ TERMS AND CONDITIONS ++ ++ 0. Definitions. ++ ++ "This License" refers to version 3 of the GNU General Public License. ++ ++ "Copyright" also means copyright-like laws that apply to other kinds of ++works, such as semiconductor masks. ++ ++ "The Program" refers to any copyrightable work licensed under this ++License. Each licensee is addressed as "you". "Licensees" and ++"recipients" may be individuals or organizations. ++ ++ To "modify" a work means to copy from or adapt all or part of the work ++in a fashion requiring copyright permission, other than the making of an ++exact copy. The resulting work is called a "modified version" of the ++earlier work or a work "based on" the earlier work. ++ ++ A "covered work" means either the unmodified Program or a work based ++on the Program. ++ ++ To "propagate" a work means to do anything with it that, without ++permission, would make you directly or secondarily liable for ++infringement under applicable copyright law, except executing it on a ++computer or modifying a private copy. Propagation includes copying, ++distribution (with or without modification), making available to the ++public, and in some countries other activities as well. ++ ++ To "convey" a work means any kind of propagation that enables other ++parties to make or receive copies. Mere interaction with a user through ++a computer network, with no transfer of a copy, is not conveying. ++ ++ An interactive user interface displays "Appropriate Legal Notices" ++to the extent that it includes a convenient and prominently visible ++feature that (1) displays an appropriate copyright notice, and (2) ++tells the user that there is no warranty for the work (except to the ++extent that warranties are provided), that licensees may convey the ++work under this License, and how to view a copy of this License. If ++the interface presents a list of user commands or options, such as a ++menu, a prominent item in the list meets this criterion. ++ ++ 1. Source Code. ++ ++ The "source code" for a work means the preferred form of the work ++for making modifications to it. "Object code" means any non-source ++form of a work. ++ ++ A "Standard Interface" means an interface that either is an official ++standard defined by a recognized standards body, or, in the case of ++interfaces specified for a particular programming language, one that ++is widely used among developers working in that language. ++ ++ The "System Libraries" of an executable work include anything, other ++than the work as a whole, that (a) is included in the normal form of ++packaging a Major Component, but which is not part of that Major ++Component, and (b) serves only to enable use of the work with that ++Major Component, or to implement a Standard Interface for which an ++implementation is available to the public in source code form. A ++"Major Component", in this context, means a major essential component ++(kernel, window system, and so on) of the specific operating system ++(if any) on which the executable work runs, or a compiler used to ++produce the work, or an object code interpreter used to run it. ++ ++ The "Corresponding Source" for a work in object code form means all ++the source code needed to generate, install, and (for an executable ++work) run the object code and to modify the work, including scripts to ++control those activities. However, it does not include the work's ++System Libraries, or general-purpose tools or generally available free ++programs which are used unmodified in performing those activities but ++which are not part of the work. For example, Corresponding Source ++includes interface definition files associated with source files for ++the work, and the source code for shared libraries and dynamically ++linked subprograms that the work is specifically designed to require, ++such as by intimate data communication or control flow between those ++subprograms and other parts of the work. ++ ++ The Corresponding Source need not include anything that users ++can regenerate automatically from other parts of the Corresponding ++Source. ++ ++ The Corresponding Source for a work in source code form is that ++same work. ++ ++ 2. Basic Permissions. ++ ++ All rights granted under this License are granted for the term of ++copyright on the Program, and are irrevocable provided the stated ++conditions are met. This License explicitly affirms your unlimited ++permission to run the unmodified Program. The output from running a ++covered work is covered by this License only if the output, given its ++content, constitutes a covered work. This License acknowledges your ++rights of fair use or other equivalent, as provided by copyright law. ++ ++ You may make, run and propagate covered works that you do not ++convey, without conditions so long as your license otherwise remains ++in force. You may convey covered works to others for the sole purpose ++of having them make modifications exclusively for you, or provide you ++with facilities for running those works, provided that you comply with ++the terms of this License in conveying all material for which you do ++not control copyright. Those thus making or running the covered works ++for you must do so exclusively on your behalf, under your direction ++and control, on terms that prohibit them from making any copies of ++your copyrighted material outside their relationship with you. ++ ++ Conveying under any other circumstances is permitted solely under ++the conditions stated below. Sublicensing is not allowed; section 10 ++makes it unnecessary. ++ ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ ++ No covered work shall be deemed part of an effective technological ++measure under any applicable law fulfilling obligations under article ++11 of the WIPO copyright treaty adopted on 20 December 1996, or ++similar laws prohibiting or restricting circumvention of such ++measures. ++ ++ When you convey a covered work, you waive any legal power to forbid ++circumvention of technological measures to the extent such circumvention ++is effected by exercising rights under this License with respect to ++the covered work, and you disclaim any intention to limit operation or ++modification of the work as a means of enforcing, against the work's ++users, your or third parties' legal rights to forbid circumvention of ++technological measures. ++ ++ 4. Conveying Verbatim Copies. ++ ++ You may convey 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; ++keep intact all notices stating that this License and any ++non-permissive terms added in accord with section 7 apply to the code; ++keep intact all notices of the absence of any warranty; and give all ++recipients a copy of this License along with the Program. ++ ++ You may charge any price or no price for each copy that you convey, ++and you may offer support or warranty protection for a fee. ++ ++ 5. Conveying Modified Source Versions. ++ ++ You may convey a work based on the Program, or the modifications to ++produce it from the Program, in the form of source code under the ++terms of section 4, provided that you also meet all of these conditions: ++ ++ a) The work must carry prominent notices stating that you modified ++ it, and giving a relevant date. ++ ++ b) The work must carry prominent notices stating that it is ++ released under this License and any conditions added under section ++ 7. This requirement modifies the requirement in section 4 to ++ "keep intact all notices". ++ ++ c) You must license the entire work, as a whole, under this ++ License to anyone who comes into possession of a copy. This ++ License will therefore apply, along with any applicable section 7 ++ additional terms, to the whole of the work, and all its parts, ++ regardless of how they are packaged. This License gives no ++ permission to license the work in any other way, but it does not ++ invalidate such permission if you have separately received it. ++ ++ d) If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has interactive ++ interfaces that do not display Appropriate Legal Notices, your ++ work need not make them do so. ++ ++ A compilation of a covered work with other separate and independent ++works, which are not by their nature extensions of the covered work, ++and which are not combined with it such as to form a larger program, ++in or on a volume of a storage or distribution medium, is called an ++"aggregate" if the compilation and its resulting copyright are not ++used to limit the access or legal rights of the compilation's users ++beyond what the individual works permit. Inclusion of a covered work ++in an aggregate does not cause this License to apply to the other ++parts of the aggregate. ++ ++ 6. Conveying Non-Source Forms. ++ ++ You may convey a covered work in object code form under the terms ++of sections 4 and 5, provided that you also convey the ++machine-readable Corresponding Source under the terms of this License, ++in one of these ways: ++ ++ a) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium ++ customarily used for software interchange. ++ ++ b) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a ++ written offer, valid for at least three years and valid for as ++ long as you offer spare parts or customer support for that product ++ model, to give anyone who possesses the object code either (1) a ++ copy of the Corresponding Source for all the software in the ++ product that is covered by this License, on a durable physical ++ medium customarily used for software interchange, for a price no ++ more than your reasonable cost of physically performing this ++ conveying of source, or (2) access to copy the ++ Corresponding Source from a network server at no charge. ++ ++ c) Convey individual copies of the object code with a copy of the ++ written offer to provide the Corresponding Source. This ++ alternative is allowed only occasionally and noncommercially, and ++ only if you received the object code with such an offer, in accord ++ with subsection 6b. ++ ++ d) Convey the object code by offering access from a designated ++ place (gratis or for a charge), and offer equivalent access to the ++ Corresponding Source in the same way through the same place at no ++ further charge. You need not require recipients to copy the ++ Corresponding Source along with the object code. If the place to ++ copy the object code is a network server, the Corresponding Source ++ may be on a different server (operated by you or a third party) ++ that supports equivalent copying facilities, provided you maintain ++ clear directions next to the object code saying where to find the ++ Corresponding Source. Regardless of what server hosts the ++ Corresponding Source, you remain obligated to ensure that it is ++ available for as long as needed to satisfy these requirements. ++ ++ e) Convey the object code using peer-to-peer transmission, provided ++ you inform other peers where the object code and Corresponding ++ Source of the work are being offered to the general public at no ++ charge under subsection 6d. ++ ++ A separable portion of the object code, whose source code is excluded ++from the Corresponding Source as a System Library, need not be ++included in conveying the object code work. ++ ++ A "User Product" is either (1) a "consumer product", which means any ++tangible personal property which is normally used for personal, family, ++or household purposes, or (2) anything designed or sold for incorporation ++into a dwelling. In determining whether a product is a consumer product, ++doubtful cases shall be resolved in favor of coverage. For a particular ++product received by a particular user, "normally used" refers to a ++typical or common use of that class of product, regardless of the status ++of the particular user or of the way in which the particular user ++actually uses, or expects or is expected to use, the product. A product ++is a consumer product regardless of whether the product has substantial ++commercial, industrial or non-consumer uses, unless such uses represent ++the only significant mode of use of the product. ++ ++ "Installation Information" for a User Product means any methods, ++procedures, authorization keys, or other information required to install ++and execute modified versions of a covered work in that User Product from ++a modified version of its Corresponding Source. The information must ++suffice to ensure that the continued functioning of the modified object ++code is in no case prevented or interfered with solely because ++modification has been made. ++ ++ If you convey an object code work under this section in, or with, or ++specifically for use in, a User Product, and the conveying occurs as ++part of a transaction in which the right of possession and use of the ++User Product is transferred to the recipient in perpetuity or for a ++fixed term (regardless of how the transaction is characterized), the ++Corresponding Source conveyed under this section must be accompanied ++by the Installation Information. But this requirement does not apply ++if neither you nor any third party retains the ability to install ++modified object code on the User Product (for example, the work has ++been installed in ROM). ++ ++ The requirement to provide Installation Information does not include a ++requirement to continue to provide support service, warranty, or updates ++for a work that has been modified or installed by the recipient, or for ++the User Product in which it has been modified or installed. Access to a ++network may be denied when the modification itself materially and ++adversely affects the operation of the network or violates the rules and ++protocols for communication across the network. ++ ++ Corresponding Source conveyed, and Installation Information provided, ++in accord with this section must be in a format that is publicly ++documented (and with an implementation available to the public in ++source code form), and must require no special password or key for ++unpacking, reading or copying. ++ ++ 7. Additional Terms. ++ ++ "Additional permissions" are terms that supplement the terms of this ++License by making exceptions from one or more of its conditions. ++Additional permissions that are applicable to the entire Program shall ++be treated as though they were included in this License, to the extent ++that they are valid under applicable law. If additional permissions ++apply only to part of the Program, that part may be used separately ++under those permissions, but the entire Program remains governed by ++this License without regard to the additional permissions. ++ ++ When you convey a copy of a covered work, you may at your option ++remove any additional permissions from that copy, or from any part of ++it. (Additional permissions may be written to require their own ++removal in certain cases when you modify the work.) You may place ++additional permissions on material, added by you to a covered work, ++for which you have or can give appropriate copyright permission. ++ ++ Notwithstanding any other provision of this License, for material you ++add to a covered work, you may (if authorized by the copyright holders of ++that material) supplement the terms of this License with terms: ++ ++ a) Disclaiming warranty or limiting liability differently from the ++ terms of sections 15 and 16 of this License; or ++ ++ b) Requiring preservation of specified reasonable legal notices or ++ author attributions in that material or in the Appropriate Legal ++ Notices displayed by works containing it; or ++ ++ c) Prohibiting misrepresentation of the origin of that material, or ++ requiring that modified versions of such material be marked in ++ reasonable ways as different from the original version; or ++ ++ d) Limiting the use for publicity purposes of names of licensors or ++ authors of the material; or ++ ++ e) Declining to grant rights under trademark law for use of some ++ trade names, trademarks, or service marks; or ++ ++ f) Requiring indemnification of licensors and authors of that ++ material by anyone who conveys the material (or modified versions of ++ it) with contractual assumptions of liability to the recipient, for ++ any liability that these contractual assumptions directly impose on ++ those licensors and authors. ++ ++ All other non-permissive additional terms are considered "further ++restrictions" within the meaning of section 10. If the Program as you ++received it, or any part of it, contains a notice stating that it is ++governed by this License along with a term that is a further ++restriction, you may remove that term. If a license document contains ++a further restriction but permits relicensing or conveying under this ++License, you may add to a covered work material governed by the terms ++of that license document, provided that the further restriction does ++not survive such relicensing or conveying. ++ ++ If you add terms to a covered work in accord with this section, you ++must place, in the relevant source files, a statement of the ++additional terms that apply to those files, or a notice indicating ++where to find the applicable terms. ++ ++ Additional terms, permissive or non-permissive, may be stated in the ++form of a separately written license, or stated as exceptions; ++the above requirements apply either way. ++ ++ 8. Termination. ++ ++ You may not propagate or modify a covered work except as expressly ++provided under this License. Any attempt otherwise to propagate or ++modify it is void, and will automatically terminate your rights under ++this License (including any patent licenses granted under the third ++paragraph of section 11). ++ ++ However, if you cease all violation of this License, then your ++license from a particular copyright holder is reinstated (a) ++provisionally, unless and until the copyright holder explicitly and ++finally terminates your license, and (b) permanently, if the copyright ++holder fails to notify you of the violation by some reasonable means ++prior to 60 days after the cessation. ++ ++ Moreover, your license from a particular copyright holder is ++reinstated permanently if the copyright holder notifies you of the ++violation by some reasonable means, this is the first time you have ++received notice of violation of this License (for any work) from that ++copyright holder, and you cure the violation prior to 30 days after ++your receipt of the notice. ++ ++ Termination of your rights under this section does not terminate the ++licenses of parties who have received copies or rights from you under ++this License. If your rights have been terminated and not permanently ++reinstated, you do not qualify to receive new licenses for the same ++material under section 10. ++ ++ 9. Acceptance Not Required for Having Copies. ++ ++ You are not required to accept this License in order to receive or ++run a copy of the Program. Ancillary propagation of a covered work ++occurring solely as a consequence of using peer-to-peer transmission ++to receive a copy likewise does not require acceptance. However, ++nothing other than this License grants you permission to propagate or ++modify any covered work. These actions infringe copyright if you do ++not accept this License. Therefore, by modifying or propagating a ++covered work, you indicate your acceptance of this License to do so. ++ ++ 10. Automatic Licensing of Downstream Recipients. ++ ++ Each time you convey a covered work, the recipient automatically ++receives a license from the original licensors, to run, modify and ++propagate that work, subject to this License. You are not responsible ++for enforcing compliance by third parties with this License. ++ ++ An "entity transaction" is a transaction transferring control of an ++organization, or substantially all assets of one, or subdividing an ++organization, or merging organizations. If propagation of a covered ++work results from an entity transaction, each party to that ++transaction who receives a copy of the work also receives whatever ++licenses to the work the party's predecessor in interest had or could ++give under the previous paragraph, plus a right to possession of the ++Corresponding Source of the work from the predecessor in interest, if ++the predecessor has it or can get it with reasonable efforts. ++ ++ You may not impose any further restrictions on the exercise of the ++rights granted or affirmed under this License. For example, you may ++not impose a license fee, royalty, or other charge for exercise of ++rights granted under this License, and you may not initiate litigation ++(including a cross-claim or counterclaim in a lawsuit) alleging that ++any patent claim is infringed by making, using, selling, offering for ++sale, or importing the Program or any portion of it. ++ ++ 11. Patents. ++ ++ A "contributor" is a copyright holder who authorizes use under this ++License of the Program or a work on which the Program is based. The ++work thus licensed is called the contributor's "contributor version". ++ ++ A contributor's "essential patent claims" are all patent claims ++owned or controlled by the contributor, whether already acquired or ++hereafter acquired, that would be infringed by some manner, permitted ++by this License, of making, using, or selling its contributor version, ++but do not include claims that would be infringed only as a ++consequence of further modification of the contributor version. For ++purposes of this definition, "control" includes the right to grant ++patent sublicenses in a manner consistent with the requirements of + 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 ++ Each contributor grants you a non-exclusive, worldwide, royalty-free ++patent license under the contributor's essential patent claims, to ++make, use, sell, offer for sale, import and otherwise run, modify and ++propagate the contents of its contributor version. ++ ++ In the following three paragraphs, a "patent license" is any express ++agreement or commitment, however denominated, not to enforce a patent ++(such as an express permission to practice a patent or covenant not to ++sue for patent infringement). To "grant" such a patent license to a ++party means to make such an agreement or commitment not to enforce a ++patent against the party. ++ ++ If you convey a covered work, knowingly relying on a patent license, ++and the Corresponding Source of the work is not available for anyone ++to copy, free of charge and under the terms of this License, through a ++publicly available network server or other readily accessible means, ++then you must either (1) cause the Corresponding Source to be so ++available, or (2) arrange to deprive yourself of the benefit of the ++patent license for this particular work, or (3) arrange, in a manner ++consistent with the requirements of this License, to extend the patent ++license to downstream recipients. "Knowingly relying" means you have ++actual knowledge that, but for the patent license, your conveying the ++covered work in a country, or your recipient's use of the covered work ++in a country, would infringe one or more identifiable patents in that ++country that you have reason to believe are valid. ++ ++ If, pursuant to or in connection with a single transaction or ++arrangement, you convey, or propagate by procuring conveyance of, a ++covered work, and grant a patent license to some of the parties ++receiving the covered work authorizing them to use, propagate, modify ++or convey a specific copy of the covered work, then the patent license ++you grant is automatically extended to all recipients of the covered ++work and works based on it. ++ ++ A patent license is "discriminatory" if it does not include within ++the scope of its coverage, prohibits the exercise of, or is ++conditioned on the non-exercise of one or more of the rights that are ++specifically granted under this License. You may not convey a covered ++work if you are a party to an arrangement with a third party that is ++in the business of distributing software, under which you make payment ++to the third party based on the extent of your activity of conveying ++the work, and under which the third party grants, to any of the ++parties who would receive the covered work from you, a discriminatory ++patent license (a) in connection with copies of the covered work ++conveyed by you (or copies made from those copies), or (b) primarily ++for and in connection with specific products or compilations that ++contain the covered work, unless you entered into that arrangement, ++or that patent license was granted, prior to 28 March 2007. ++ ++ Nothing in this License shall be construed as excluding or limiting ++any implied license or other defenses to infringement that may ++otherwise be available to you under applicable patent law. ++ ++ 12. No Surrender of Others' Freedom. ++ ++ If 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 ++excuse you from the conditions of this License. If you cannot convey a ++covered work so as to satisfy simultaneously your obligations under this ++License and any other pertinent obligations, then as a consequence you may ++not convey it at all. For example, if you agree to terms that obligate you ++to collect a royalty for further conveying from those to whom you convey ++the Program, the only way you could satisfy both those terms and this ++License would be to refrain entirely from conveying the Program. ++ ++ 13. Use with the GNU Affero General Public License. ++ ++ Notwithstanding any other provision of this License, you have ++permission to link or combine any covered work with a work licensed ++under version 3 of the GNU Affero General Public License into a single ++combined work, and to convey the resulting work. The terms of this ++License will continue to apply to the part which is the covered work, ++but the special requirements of the GNU Affero General Public License, ++section 13, concerning interaction through a network will apply to the ++combination as such. ++ ++ 14. Revised Versions of this License. ++ ++ The Free Software Foundation may publish revised and/or new versions of ++the GNU 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 ++ Each version is given a distinguishing version number. If the ++Program specifies that a certain numbered version of the GNU General ++Public License "or any later version" applies to it, you have the ++option of following the terms and conditions either of that numbered ++version or of any later version published by the Free Software ++Foundation. If the Program does not specify a version number of the ++GNU General Public License, you may choose any version ever published ++by the Free Software Foundation. ++ ++ If the Program specifies that a proxy can decide which future ++versions of the GNU General Public License can be used, that proxy's ++public statement of acceptance of a version permanently authorizes you ++to choose that version for the Program. ++ ++ Later license versions may give you additional or different ++permissions. However, no additional obligations are imposed on any ++author or copyright holder as a result of your choosing to follow a ++later version. ++ ++ 15. Disclaimer of Warranty. ++ ++ 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. ++ ++ 16. Limitation of Liability. ++ ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING ++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS ++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. ++ ++ 17. Interpretation of Sections 15 and 16. ++ ++ If the disclaimer of warranty and limitation of liability provided ++above cannot be given local legal effect according to their terms, ++reviewing courts shall apply local law that most closely approximates ++an absolute waiver of all civil liability in connection with the ++Program, unless a warranty or assumption of liability accompanies a ++copy of the Program in return for a fee. ++ ++ 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 +@@ -287,15 +628,15 @@ 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 ++state the exclusion of warranty; and each file should have at least + the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + +- This program is free software; you can redistribute it and/or modify ++ 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 ++ the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, +@@ -304,37 +645,30 @@ the "copyright" line and a pointer to where the full notice is found. + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +- ++ along with this program. If not, see . + + 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: ++ If the program does terminal interaction, 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'. ++ Copyright (C) ++ This program 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. +- +- , 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. ++parts of the General Public License. Of course, your program's commands ++might be different; for a GUI interface, you would use an "about box". ++ ++ You should also get your employer (if you work as a programmer) or school, ++if any, to sign a "copyright disclaimer" for the program, if necessary. ++For more information on this, and how to apply and follow the GNU GPL, see ++. ++ ++ The GNU 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 Lesser General ++Public License instead of this License. But first, please read ++. +diff --git a/ChangeLog b/ChangeLog +index b9a510f..4031746 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -2,6 +2,11 @@ + VERSION 0.9.1svn + ================ + ++2009-09-06 Vincent Richard ++ ++ * Relicensed VMime under the GNU GPL license version 3. Dual licensing ++ is now available. More info here: http://www.vmime.org/pages/Licensing ++ + 2008-10-19 Vincent Richard + + * Started version 0.9.1. +diff --git a/doc/book/intro.tex b/doc/book/intro.tex +index 93a3675..26d9abe 100644 +--- a/doc/book/intro.tex ++++ b/doc/book/intro.tex +@@ -52,14 +52,14 @@ The main objectives of this library are: + + VMime library is Free Software and is licensed under the terms of the GNU + General Public License\footnote{See Appendix \ref{appendix_license} and +-\url{http://www.gnu.org/copyleft/gpl.html}} (GPL): ++\url{http://www.gnu.org/copyleft/gpl.html}} (GPL) version 3: + + \begin{verbatim} +- Copyright (C) 2002-2008 Vincent Richard ++ Copyright (C) 2002-2009 Vincent Richard + + VMime library 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 ++ published by the Free Software Foundation; either version 3 of + the License, or (at your option) any later version. + + VMime is distributed in the hope that it will be useful, but +@@ -79,7 +79,7 @@ GNU Free Documentation + License\footnote{See \url{http://www.gnu.org/copyleft/fdl.html}} (FDL): + + \begin{verbatim} +- Copyright (C) 2004-2007 Vincent Richard ++ Copyright (C) 2004-2009 Vincent Richard + + Permission is granted to copy, distribute and/or modify + this document under the terms of the GNU Free Documentation +diff --git a/examples/example1.cpp b/examples/example1.cpp +index 5552510..a340f1d 100644 +--- a/examples/example1.cpp ++++ b/examples/example1.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/examples/example2.cpp b/examples/example2.cpp +index 953d669..af91f12 100644 +--- a/examples/example2.cpp ++++ b/examples/example2.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/examples/example3.cpp b/examples/example3.cpp +index 0a260a9..cb3e6ae 100644 +--- a/examples/example3.cpp ++++ b/examples/example3.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/examples/example4.cpp b/examples/example4.cpp +index 09c2dad..6a746da 100644 +--- a/examples/example4.cpp ++++ b/examples/example4.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/examples/example5.cpp b/examples/example5.cpp +index 11ceb83..ad84db9 100644 +--- a/examples/example5.cpp ++++ b/examples/example5.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/examples/example6.cpp b/examples/example6.cpp +index 8bf7b44..bcb2df9 100644 +--- a/examples/example6.cpp ++++ b/examples/example6.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/examples/example7.cpp b/examples/example7.cpp +index 79445ea..1ddb3d0 100644 +--- a/examples/example7.cpp ++++ b/examples/example7.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/examples/viewer/viewer.cpp b/examples/viewer/viewer.cpp +index 50862b3..ee21f01 100644 +--- a/examples/viewer/viewer.cpp ++++ b/examples/viewer/viewer.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/address.cpp b/src/address.cpp +index 17220c1..88c39a3 100644 +--- a/src/address.cpp ++++ b/src/address.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/addressList.cpp b/src/addressList.cpp +index fd7b35c..31a2a3d 100644 +--- a/src/addressList.cpp ++++ b/src/addressList.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/attachmentHelper.cpp b/src/attachmentHelper.cpp +index ec6e2f7..65e8c88 100644 +--- a/src/attachmentHelper.cpp ++++ b/src/attachmentHelper.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/base.cpp b/src/base.cpp +index 71c63cd..2e47ca3 100644 +--- a/src/base.cpp ++++ b/src/base.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/body.cpp b/src/body.cpp +index 0e34762..3f5ff0f 100644 +--- a/src/body.cpp ++++ b/src/body.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/bodyPart.cpp b/src/bodyPart.cpp +index b35346b..20bb102 100644 +--- a/src/bodyPart.cpp ++++ b/src/bodyPart.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/bodyPartAttachment.cpp b/src/bodyPartAttachment.cpp +index b4fb7b1..f3b6b66 100644 +--- a/src/bodyPartAttachment.cpp ++++ b/src/bodyPartAttachment.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/charset.cpp b/src/charset.cpp +index 798d34f..e3c11da 100644 +--- a/src/charset.cpp ++++ b/src/charset.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/charsetConverter.cpp b/src/charsetConverter.cpp +index 26609db..ec74ae5 100644 +--- a/src/charsetConverter.cpp ++++ b/src/charsetConverter.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/component.cpp b/src/component.cpp +index 69a6049..fbf677b 100644 +--- a/src/component.cpp ++++ b/src/component.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/constants.cpp b/src/constants.cpp +index ba6f194..b3f51a2 100644 +--- a/src/constants.cpp ++++ b/src/constants.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/contentDisposition.cpp b/src/contentDisposition.cpp +index 7ffa424..0ab7c45 100644 +--- a/src/contentDisposition.cpp ++++ b/src/contentDisposition.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/contentDispositionField.cpp b/src/contentDispositionField.cpp +index 0630a51..355e820 100644 +--- a/src/contentDispositionField.cpp ++++ b/src/contentDispositionField.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/contentHandler.cpp b/src/contentHandler.cpp +index 5d50283..6022411 100644 +--- a/src/contentHandler.cpp ++++ b/src/contentHandler.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/contentTypeField.cpp b/src/contentTypeField.cpp +index 7b5a3e2..406a06e 100644 +--- a/src/contentTypeField.cpp ++++ b/src/contentTypeField.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/dateTime.cpp b/src/dateTime.cpp +index 66cd992..089a900 100644 +--- a/src/dateTime.cpp ++++ b/src/dateTime.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/defaultAttachment.cpp b/src/defaultAttachment.cpp +index c2ad61e..b61d52e 100644 +--- a/src/defaultAttachment.cpp ++++ b/src/defaultAttachment.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/disposition.cpp b/src/disposition.cpp +index 1b420fb..b8059a7 100644 +--- a/src/disposition.cpp ++++ b/src/disposition.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/emptyContentHandler.cpp b/src/emptyContentHandler.cpp +index bbee986..5245341 100644 +--- a/src/emptyContentHandler.cpp ++++ b/src/emptyContentHandler.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/encoding.cpp b/src/encoding.cpp +index a45573d..58ce71d 100644 +--- a/src/encoding.cpp ++++ b/src/encoding.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/exception.cpp b/src/exception.cpp +index 54be174..60ec95b 100644 +--- a/src/exception.cpp ++++ b/src/exception.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/fileAttachment.cpp b/src/fileAttachment.cpp +index 20b8083..e643491 100644 +--- a/src/fileAttachment.cpp ++++ b/src/fileAttachment.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/generatedMessageAttachment.cpp b/src/generatedMessageAttachment.cpp +index 205b549..e9bd1a6 100644 +--- a/src/generatedMessageAttachment.cpp ++++ b/src/generatedMessageAttachment.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/header.cpp b/src/header.cpp +index 78424b3..443aab8 100644 +--- a/src/header.cpp ++++ b/src/header.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/headerField.cpp b/src/headerField.cpp +index 0057712..52fe7e8 100644 +--- a/src/headerField.cpp ++++ b/src/headerField.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/headerFieldFactory.cpp b/src/headerFieldFactory.cpp +index 6d949f0..807a2b3 100644 +--- a/src/headerFieldFactory.cpp ++++ b/src/headerFieldFactory.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/htmlTextPart.cpp b/src/htmlTextPart.cpp +index a287573..7713034 100644 +--- a/src/htmlTextPart.cpp ++++ b/src/htmlTextPart.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mailbox.cpp b/src/mailbox.cpp +index b1ed7a2..2f62521 100644 +--- a/src/mailbox.cpp ++++ b/src/mailbox.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mailboxField.cpp b/src/mailboxField.cpp +index 0fc5773..0d9bd83 100644 +--- a/src/mailboxField.cpp ++++ b/src/mailboxField.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mailboxGroup.cpp b/src/mailboxGroup.cpp +index ac7202c..94f7ba6 100644 +--- a/src/mailboxGroup.cpp ++++ b/src/mailboxGroup.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mailboxList.cpp b/src/mailboxList.cpp +index e9fe7f9..0023d9d 100644 +--- a/src/mailboxList.cpp ++++ b/src/mailboxList.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mdn/MDNHelper.cpp b/src/mdn/MDNHelper.cpp +index a4a4ee4..b419b85 100644 +--- a/src/mdn/MDNHelper.cpp ++++ b/src/mdn/MDNHelper.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mdn/MDNInfos.cpp b/src/mdn/MDNInfos.cpp +index 82d580d..cd8e38f 100644 +--- a/src/mdn/MDNInfos.cpp ++++ b/src/mdn/MDNInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mdn/receivedMDNInfos.cpp b/src/mdn/receivedMDNInfos.cpp +index 366d46f..cff211c 100644 +--- a/src/mdn/receivedMDNInfos.cpp ++++ b/src/mdn/receivedMDNInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mdn/sendableMDNInfos.cpp b/src/mdn/sendableMDNInfos.cpp +index 953e492..d274ae0 100644 +--- a/src/mdn/sendableMDNInfos.cpp ++++ b/src/mdn/sendableMDNInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/mediaType.cpp b/src/mediaType.cpp +index 569ccc3..725f933 100644 +--- a/src/mediaType.cpp ++++ b/src/mediaType.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/message.cpp b/src/message.cpp +index 04d1287..6f4b046 100644 +--- a/src/message.cpp ++++ b/src/message.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/messageBuilder.cpp b/src/messageBuilder.cpp +index cef4f73..d619554 100644 +--- a/src/messageBuilder.cpp ++++ b/src/messageBuilder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/messageId.cpp b/src/messageId.cpp +index 08a8e37..961fb63 100644 +--- a/src/messageId.cpp ++++ b/src/messageId.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/messageIdSequence.cpp b/src/messageIdSequence.cpp +index 6011358..08103d0 100644 +--- a/src/messageIdSequence.cpp ++++ b/src/messageIdSequence.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/messageParser.cpp b/src/messageParser.cpp +index 639ac5f..35e0bba 100644 +--- a/src/messageParser.cpp ++++ b/src/messageParser.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/misc/importanceHelper.cpp b/src/misc/importanceHelper.cpp +index 763753c..22d0cdf 100644 +--- a/src/misc/importanceHelper.cpp ++++ b/src/misc/importanceHelper.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/builtinServices.inl b/src/net/builtinServices.inl +index e74766e..4a6ac87 100644 +--- a/src/net/builtinServices.inl ++++ b/src/net/builtinServices.inl +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/defaultConnectionInfos.cpp b/src/net/defaultConnectionInfos.cpp +index ee706a3..41f1e0f 100644 +--- a/src/net/defaultConnectionInfos.cpp ++++ b/src/net/defaultConnectionInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/events.cpp b/src/net/events.cpp +index a6674a7..52c13ee 100644 +--- a/src/net/events.cpp ++++ b/src/net/events.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/folder.cpp b/src/net/folder.cpp +index 20291be..47ec317 100644 +--- a/src/net/folder.cpp ++++ b/src/net/folder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPConnection.cpp b/src/net/imap/IMAPConnection.cpp +index 7c78b78..c3ee574 100644 +--- a/src/net/imap/IMAPConnection.cpp ++++ b/src/net/imap/IMAPConnection.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPFolder.cpp b/src/net/imap/IMAPFolder.cpp +index 2130211..c06a8d4 100644 +--- a/src/net/imap/IMAPFolder.cpp ++++ b/src/net/imap/IMAPFolder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPMessage.cpp b/src/net/imap/IMAPMessage.cpp +index 90bebf3..29c2aea 100644 +--- a/src/net/imap/IMAPMessage.cpp ++++ b/src/net/imap/IMAPMessage.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPSStore.cpp b/src/net/imap/IMAPSStore.cpp +index 0b4b90b..9e92f92 100644 +--- a/src/net/imap/IMAPSStore.cpp ++++ b/src/net/imap/IMAPSStore.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPServiceInfos.cpp b/src/net/imap/IMAPServiceInfos.cpp +index 1604411..33898f4 100644 +--- a/src/net/imap/IMAPServiceInfos.cpp ++++ b/src/net/imap/IMAPServiceInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPStore.cpp b/src/net/imap/IMAPStore.cpp +index 753adc6..f260e55 100644 +--- a/src/net/imap/IMAPStore.cpp ++++ b/src/net/imap/IMAPStore.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPTag.cpp b/src/net/imap/IMAPTag.cpp +index 7b8ce3f..abb7924 100644 +--- a/src/net/imap/IMAPTag.cpp ++++ b/src/net/imap/IMAPTag.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/imap/IMAPUtils.cpp b/src/net/imap/IMAPUtils.cpp +index 18ca00c..c4651ed 100644 +--- a/src/net/imap/IMAPUtils.cpp ++++ b/src/net/imap/IMAPUtils.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/format/courierMaildirFormat.cpp b/src/net/maildir/format/courierMaildirFormat.cpp +index 1118c27..6dbda80 100644 +--- a/src/net/maildir/format/courierMaildirFormat.cpp ++++ b/src/net/maildir/format/courierMaildirFormat.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/format/kmailMaildirFormat.cpp b/src/net/maildir/format/kmailMaildirFormat.cpp +index eeedd41..5fb75fe 100644 +--- a/src/net/maildir/format/kmailMaildirFormat.cpp ++++ b/src/net/maildir/format/kmailMaildirFormat.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/maildirFolder.cpp b/src/net/maildir/maildirFolder.cpp +index 65abdcf..3e361ae 100644 +--- a/src/net/maildir/maildirFolder.cpp ++++ b/src/net/maildir/maildirFolder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/maildirFormat.cpp b/src/net/maildir/maildirFormat.cpp +index 17899a2..607ed61 100644 +--- a/src/net/maildir/maildirFormat.cpp ++++ b/src/net/maildir/maildirFormat.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/maildirMessage.cpp b/src/net/maildir/maildirMessage.cpp +index 1ae83ee..ed87cdb 100644 +--- a/src/net/maildir/maildirMessage.cpp ++++ b/src/net/maildir/maildirMessage.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/maildirServiceInfos.cpp b/src/net/maildir/maildirServiceInfos.cpp +index 48869dc..55ba64e 100644 +--- a/src/net/maildir/maildirServiceInfos.cpp ++++ b/src/net/maildir/maildirServiceInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/maildirStore.cpp b/src/net/maildir/maildirStore.cpp +index 8e4e002..3b77024 100644 +--- a/src/net/maildir/maildirStore.cpp ++++ b/src/net/maildir/maildirStore.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/maildir/maildirUtils.cpp b/src/net/maildir/maildirUtils.cpp +index bb2b69f..19887b2 100644 +--- a/src/net/maildir/maildirUtils.cpp ++++ b/src/net/maildir/maildirUtils.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/message.cpp b/src/net/message.cpp +index 37f020b..9a54809 100644 +--- a/src/net/message.cpp ++++ b/src/net/message.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/pop3/POP3Folder.cpp b/src/net/pop3/POP3Folder.cpp +index ba70f2b..d5fc687 100644 +--- a/src/net/pop3/POP3Folder.cpp ++++ b/src/net/pop3/POP3Folder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/pop3/POP3Message.cpp b/src/net/pop3/POP3Message.cpp +index 6cdd455..b38951b 100644 +--- a/src/net/pop3/POP3Message.cpp ++++ b/src/net/pop3/POP3Message.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/pop3/POP3SStore.cpp b/src/net/pop3/POP3SStore.cpp +index 154f049..59aacb8 100644 +--- a/src/net/pop3/POP3SStore.cpp ++++ b/src/net/pop3/POP3SStore.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/pop3/POP3ServiceInfos.cpp b/src/net/pop3/POP3ServiceInfos.cpp +index da67f84..77faa5f 100644 +--- a/src/net/pop3/POP3ServiceInfos.cpp ++++ b/src/net/pop3/POP3ServiceInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/pop3/POP3Store.cpp b/src/net/pop3/POP3Store.cpp +index 16a5dff..e5e8ba7 100644 +--- a/src/net/pop3/POP3Store.cpp ++++ b/src/net/pop3/POP3Store.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/pop3/POP3Utils.cpp b/src/net/pop3/POP3Utils.cpp +index b8df9fd..de70dfe 100644 +--- a/src/net/pop3/POP3Utils.cpp ++++ b/src/net/pop3/POP3Utils.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/sendmail/sendmailServiceInfos.cpp b/src/net/sendmail/sendmailServiceInfos.cpp +index de23e2b..fb5fb54 100644 +--- a/src/net/sendmail/sendmailServiceInfos.cpp ++++ b/src/net/sendmail/sendmailServiceInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/sendmail/sendmailTransport.cpp b/src/net/sendmail/sendmailTransport.cpp +index c1aded6..53ff0d1 100644 +--- a/src/net/sendmail/sendmailTransport.cpp ++++ b/src/net/sendmail/sendmailTransport.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/service.cpp b/src/net/service.cpp +index 2fae23f..f12c78f 100644 +--- a/src/net/service.cpp ++++ b/src/net/service.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/serviceFactory.cpp b/src/net/serviceFactory.cpp +index 0abeeb3..65f9aa1 100644 +--- a/src/net/serviceFactory.cpp ++++ b/src/net/serviceFactory.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/serviceInfos.cpp b/src/net/serviceInfos.cpp +index d6aee29..069d9e1 100644 +--- a/src/net/serviceInfos.cpp ++++ b/src/net/serviceInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/serviceRegistration.inl b/src/net/serviceRegistration.inl +index 75fa435..6eaca1e 100644 +--- a/src/net/serviceRegistration.inl ++++ b/src/net/serviceRegistration.inl +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/session.cpp b/src/net/session.cpp +index ff23bc5..3898a8d 100644 +--- a/src/net/session.cpp ++++ b/src/net/session.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/smtp/SMTPResponse.cpp b/src/net/smtp/SMTPResponse.cpp +index 24301c5..03c199b 100644 +--- a/src/net/smtp/SMTPResponse.cpp ++++ b/src/net/smtp/SMTPResponse.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/smtp/SMTPSTransport.cpp b/src/net/smtp/SMTPSTransport.cpp +index 2b70731..db7fc6f 100644 +--- a/src/net/smtp/SMTPSTransport.cpp ++++ b/src/net/smtp/SMTPSTransport.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/smtp/SMTPServiceInfos.cpp b/src/net/smtp/SMTPServiceInfos.cpp +index 7c39ea5..d2d0dcc 100644 +--- a/src/net/smtp/SMTPServiceInfos.cpp ++++ b/src/net/smtp/SMTPServiceInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/smtp/SMTPTransport.cpp b/src/net/smtp/SMTPTransport.cpp +index 5ad8d70..917a56c 100644 +--- a/src/net/smtp/SMTPTransport.cpp ++++ b/src/net/smtp/SMTPTransport.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/tls/TLSSecuredConnectionInfos.cpp b/src/net/tls/TLSSecuredConnectionInfos.cpp +index 55df5e2..2a37069 100644 +--- a/src/net/tls/TLSSecuredConnectionInfos.cpp ++++ b/src/net/tls/TLSSecuredConnectionInfos.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/tls/TLSSession.cpp b/src/net/tls/TLSSession.cpp +index d90be8e..1146d1b 100644 +--- a/src/net/tls/TLSSession.cpp ++++ b/src/net/tls/TLSSession.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/tls/TLSSocket.cpp b/src/net/tls/TLSSocket.cpp +index 4f64967..c2f91f6 100644 +--- a/src/net/tls/TLSSocket.cpp ++++ b/src/net/tls/TLSSocket.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/net/transport.cpp b/src/net/transport.cpp +index 5db70d2..dd4663d 100644 +--- a/src/net/transport.cpp ++++ b/src/net/transport.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/object.cpp b/src/object.cpp +index a15417a..1424f68 100644 +--- a/src/object.cpp ++++ b/src/object.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/options.cpp b/src/options.cpp +index a7c838e..f75da99 100644 +--- a/src/options.cpp ++++ b/src/options.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/parameter.cpp b/src/parameter.cpp +index 466df3d..6cd8d1f 100644 +--- a/src/parameter.cpp ++++ b/src/parameter.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/parameterizedHeaderField.cpp b/src/parameterizedHeaderField.cpp +index a45c627..090d5b4 100644 +--- a/src/parameterizedHeaderField.cpp ++++ b/src/parameterizedHeaderField.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/parsedMessageAttachment.cpp b/src/parsedMessageAttachment.cpp +index 3ef17ac..bde56aa 100644 +--- a/src/parsedMessageAttachment.cpp ++++ b/src/parsedMessageAttachment.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/path.cpp b/src/path.cpp +index 5816787..37a4090 100644 +--- a/src/path.cpp ++++ b/src/path.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/plainTextPart.cpp b/src/plainTextPart.cpp +index dee3f39..7a674e7 100644 +--- a/src/plainTextPart.cpp ++++ b/src/plainTextPart.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platform.cpp b/src/platform.cpp +index 9db92cc..d1d23de 100644 +--- a/src/platform.cpp ++++ b/src/platform.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platforms/posix/posixChildProcess.cpp b/src/platforms/posix/posixChildProcess.cpp +index d1a0d91..68ef021 100644 +--- a/src/platforms/posix/posixChildProcess.cpp ++++ b/src/platforms/posix/posixChildProcess.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index 2a1356a..4ec2ef3 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platforms/posix/posixHandler.cpp b/src/platforms/posix/posixHandler.cpp +index 94a5072..f43972e 100644 +--- a/src/platforms/posix/posixHandler.cpp ++++ b/src/platforms/posix/posixHandler.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platforms/posix/posixSocket.cpp b/src/platforms/posix/posixSocket.cpp +index 4c2375c..6740995 100644 +--- a/src/platforms/posix/posixSocket.cpp ++++ b/src/platforms/posix/posixSocket.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platforms/windows/windowsFile.cpp b/src/platforms/windows/windowsFile.cpp +index c94076c..5412a3b 100644 +--- a/src/platforms/windows/windowsFile.cpp ++++ b/src/platforms/windows/windowsFile.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://vmime.sourceforge.net) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platforms/windows/windowsHandler.cpp b/src/platforms/windows/windowsHandler.cpp +index 58b1ae9..404d3cb 100644 +--- a/src/platforms/windows/windowsHandler.cpp ++++ b/src/platforms/windows/windowsHandler.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://vmime.sourceforge.net) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/platforms/windows/windowsSocket.cpp b/src/platforms/windows/windowsSocket.cpp +index 9450efc..8a42583 100644 +--- a/src/platforms/windows/windowsSocket.cpp ++++ b/src/platforms/windows/windowsSocket.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://vmime.sourceforge.net) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/propertySet.cpp b/src/propertySet.cpp +index c980d96..1b37179 100644 +--- a/src/propertySet.cpp ++++ b/src/propertySet.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/relay.cpp b/src/relay.cpp +index b86ea14..5cd454f 100644 +--- a/src/relay.cpp ++++ b/src/relay.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/cert/X509Certificate.cpp b/src/security/cert/X509Certificate.cpp +index ac1f7e0..1cd079c 100644 +--- a/src/security/cert/X509Certificate.cpp ++++ b/src/security/cert/X509Certificate.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/cert/certificateChain.cpp b/src/security/cert/certificateChain.cpp +index 0425d00..71b8ab4 100644 +--- a/src/security/cert/certificateChain.cpp ++++ b/src/security/cert/certificateChain.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/cert/defaultCertificateVerifier.cpp b/src/security/cert/defaultCertificateVerifier.cpp +index dc082a8..6fde551 100644 +--- a/src/security/cert/defaultCertificateVerifier.cpp ++++ b/src/security/cert/defaultCertificateVerifier.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/defaultAuthenticator.cpp b/src/security/defaultAuthenticator.cpp +index 8019106..088ef0d 100644 +--- a/src/security/defaultAuthenticator.cpp ++++ b/src/security/defaultAuthenticator.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/digest/md5/md5MessageDigest.cpp b/src/security/digest/md5/md5MessageDigest.cpp +index d83908f..84ca99a 100644 +--- a/src/security/digest/md5/md5MessageDigest.cpp ++++ b/src/security/digest/md5/md5MessageDigest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/digest/messageDigest.cpp b/src/security/digest/messageDigest.cpp +index 6a5de13..4217984 100644 +--- a/src/security/digest/messageDigest.cpp ++++ b/src/security/digest/messageDigest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/digest/messageDigestFactory.cpp b/src/security/digest/messageDigestFactory.cpp +index 1348d65..0326931 100644 +--- a/src/security/digest/messageDigestFactory.cpp ++++ b/src/security/digest/messageDigestFactory.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/digest/sha1/sha1MessageDigest.cpp b/src/security/digest/sha1/sha1MessageDigest.cpp +index 51eec6a..6d99e3f 100644 +--- a/src/security/digest/sha1/sha1MessageDigest.cpp ++++ b/src/security/digest/sha1/sha1MessageDigest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/sasl/SASLContext.cpp b/src/security/sasl/SASLContext.cpp +index fca95c7..51c2bed 100644 +--- a/src/security/sasl/SASLContext.cpp ++++ b/src/security/sasl/SASLContext.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/sasl/SASLMechanismFactory.cpp b/src/security/sasl/SASLMechanismFactory.cpp +index a866e0c..285d6d3 100644 +--- a/src/security/sasl/SASLMechanismFactory.cpp ++++ b/src/security/sasl/SASLMechanismFactory.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/sasl/SASLSession.cpp b/src/security/sasl/SASLSession.cpp +index f7f80f5..c1688b7 100644 +--- a/src/security/sasl/SASLSession.cpp ++++ b/src/security/sasl/SASLSession.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/sasl/SASLSocket.cpp b/src/security/sasl/SASLSocket.cpp +index 5f86aed..118429a 100644 +--- a/src/security/sasl/SASLSocket.cpp ++++ b/src/security/sasl/SASLSocket.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/sasl/builtinSASLMechanism.cpp b/src/security/sasl/builtinSASLMechanism.cpp +index 1c95831..767caf9 100644 +--- a/src/security/sasl/builtinSASLMechanism.cpp ++++ b/src/security/sasl/builtinSASLMechanism.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/security/sasl/defaultSASLAuthenticator.cpp b/src/security/sasl/defaultSASLAuthenticator.cpp +index 085493a..06ffc49 100644 +--- a/src/security/sasl/defaultSASLAuthenticator.cpp ++++ b/src/security/sasl/defaultSASLAuthenticator.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/streamContentHandler.cpp b/src/streamContentHandler.cpp +index b5f02bf..9edf4aa 100644 +--- a/src/streamContentHandler.cpp ++++ b/src/streamContentHandler.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/stringContentHandler.cpp b/src/stringContentHandler.cpp +index 84cada5..248fca4 100644 +--- a/src/stringContentHandler.cpp ++++ b/src/stringContentHandler.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/text.cpp b/src/text.cpp +index 2c811c4..f9ded7c 100644 +--- a/src/text.cpp ++++ b/src/text.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/textPartFactory.cpp b/src/textPartFactory.cpp +index 977ba07..c490845 100644 +--- a/src/textPartFactory.cpp ++++ b/src/textPartFactory.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/datetimeUtils.cpp b/src/utility/datetimeUtils.cpp +index cc06f50..cf05a93 100644 +--- a/src/utility/datetimeUtils.cpp ++++ b/src/utility/datetimeUtils.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/b64Encoder.cpp b/src/utility/encoder/b64Encoder.cpp +index c4ba2b3..58ef320 100644 +--- a/src/utility/encoder/b64Encoder.cpp ++++ b/src/utility/encoder/b64Encoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/binaryEncoder.cpp b/src/utility/encoder/binaryEncoder.cpp +index 2bc77d2..81da790 100644 +--- a/src/utility/encoder/binaryEncoder.cpp ++++ b/src/utility/encoder/binaryEncoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/defaultEncoder.cpp b/src/utility/encoder/defaultEncoder.cpp +index db833c8..4d0ffb5 100644 +--- a/src/utility/encoder/defaultEncoder.cpp ++++ b/src/utility/encoder/defaultEncoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/eightBitEncoder.cpp b/src/utility/encoder/eightBitEncoder.cpp +index 88f07bc..25ca6c5 100644 +--- a/src/utility/encoder/eightBitEncoder.cpp ++++ b/src/utility/encoder/eightBitEncoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/encoder.cpp b/src/utility/encoder/encoder.cpp +index 893ed4f..85b3708 100644 +--- a/src/utility/encoder/encoder.cpp ++++ b/src/utility/encoder/encoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/encoderFactory.cpp b/src/utility/encoder/encoderFactory.cpp +index 9d7c107..428788d 100644 +--- a/src/utility/encoder/encoderFactory.cpp ++++ b/src/utility/encoder/encoderFactory.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/qpEncoder.cpp b/src/utility/encoder/qpEncoder.cpp +index 737d488..c3a8c6d 100644 +--- a/src/utility/encoder/qpEncoder.cpp ++++ b/src/utility/encoder/qpEncoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/sevenBitEncoder.cpp b/src/utility/encoder/sevenBitEncoder.cpp +index 812afa9..40f0fbf 100644 +--- a/src/utility/encoder/sevenBitEncoder.cpp ++++ b/src/utility/encoder/sevenBitEncoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/encoder/uuEncoder.cpp b/src/utility/encoder/uuEncoder.cpp +index 0e72599..d2974e6 100644 +--- a/src/utility/encoder/uuEncoder.cpp ++++ b/src/utility/encoder/uuEncoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/filteredStream.cpp b/src/utility/filteredStream.cpp +index 5db0104..619f9da 100644 +--- a/src/utility/filteredStream.cpp ++++ b/src/utility/filteredStream.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/path.cpp b/src/utility/path.cpp +index 053e612..9e314e6 100644 +--- a/src/utility/path.cpp ++++ b/src/utility/path.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/progressListener.cpp b/src/utility/progressListener.cpp +index c7babcb..4bce372 100644 +--- a/src/utility/progressListener.cpp ++++ b/src/utility/progressListener.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/random.cpp b/src/utility/random.cpp +index 2e373bb..d12989b 100644 +--- a/src/utility/random.cpp ++++ b/src/utility/random.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/smartPtr.cpp b/src/utility/smartPtr.cpp +index bbc4843..e039036 100644 +--- a/src/utility/smartPtr.cpp ++++ b/src/utility/smartPtr.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/smartPtrInt.cpp b/src/utility/smartPtrInt.cpp +index 4b4ce13..2ee677b 100644 +--- a/src/utility/smartPtrInt.cpp ++++ b/src/utility/smartPtrInt.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/stream.cpp b/src/utility/stream.cpp +index 8fbf337..483784c 100644 +--- a/src/utility/stream.cpp ++++ b/src/utility/stream.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/stringProxy.cpp b/src/utility/stringProxy.cpp +index 60093b6..a4ba6d2 100644 +--- a/src/utility/stringProxy.cpp ++++ b/src/utility/stringProxy.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/stringUtils.cpp b/src/utility/stringUtils.cpp +index 9566599..03b2057 100644 +--- a/src/utility/stringUtils.cpp ++++ b/src/utility/stringUtils.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/url.cpp b/src/utility/url.cpp +index 7f609c7..6dfa68a 100644 +--- a/src/utility/url.cpp ++++ b/src/utility/url.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/utility/urlUtils.cpp b/src/utility/urlUtils.cpp +index d4243df..6df5794 100644 +--- a/src/utility/urlUtils.cpp ++++ b/src/utility/urlUtils.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/word.cpp b/src/word.cpp +index 95adc5c..958c33e 100644 +--- a/src/word.cpp ++++ b/src/word.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/src/wordEncoder.cpp b/src/wordEncoder.cpp +index ab7c004..154b4ef 100644 +--- a/src/wordEncoder.cpp ++++ b/src/wordEncoder.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/charset/main.cpp b/tests/charset/main.cpp +index dd043ac..3e3a50b 100644 +--- a/tests/charset/main.cpp ++++ b/tests/charset/main.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/misc/importanceHelperTest.cpp b/tests/misc/importanceHelperTest.cpp +index de3e7fc..d200cdf 100644 +--- a/tests/misc/importanceHelperTest.cpp ++++ b/tests/misc/importanceHelperTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/net/maildir/maildirStoreTest.cpp b/tests/net/maildir/maildirStoreTest.cpp +index f24023b..5aad90b 100644 +--- a/tests/net/maildir/maildirStoreTest.cpp ++++ b/tests/net/maildir/maildirStoreTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/net/smtp/SMTPResponseTest.cpp b/tests/net/smtp/SMTPResponseTest.cpp +index 3fbb19a..4ad284f 100644 +--- a/tests/net/smtp/SMTPResponseTest.cpp ++++ b/tests/net/smtp/SMTPResponseTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/net/smtp/SMTPTransportTest.cpp b/tests/net/smtp/SMTPTransportTest.cpp +index 640b2a1..5015552 100644 +--- a/tests/net/smtp/SMTPTransportTest.cpp ++++ b/tests/net/smtp/SMTPTransportTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/attachmentHelperTest.cpp b/tests/parser/attachmentHelperTest.cpp +index d1ae10a..142730c 100644 +--- a/tests/parser/attachmentHelperTest.cpp ++++ b/tests/parser/attachmentHelperTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/bodyPartTest.cpp b/tests/parser/bodyPartTest.cpp +index d6fff5e..12c4f74 100644 +--- a/tests/parser/bodyPartTest.cpp ++++ b/tests/parser/bodyPartTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/charsetTest.cpp b/tests/parser/charsetTest.cpp +index 5a791c5..8ad71d7 100644 +--- a/tests/parser/charsetTest.cpp ++++ b/tests/parser/charsetTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/datetimeTest.cpp b/tests/parser/datetimeTest.cpp +index b8ceea2..11f9b55 100644 +--- a/tests/parser/datetimeTest.cpp ++++ b/tests/parser/datetimeTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/dispositionTest.cpp b/tests/parser/dispositionTest.cpp +index dc79d66..d0572b0 100644 +--- a/tests/parser/dispositionTest.cpp ++++ b/tests/parser/dispositionTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/headerTest.cpp b/tests/parser/headerTest.cpp +index e2807ad..04cd14f 100644 +--- a/tests/parser/headerTest.cpp ++++ b/tests/parser/headerTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/htmlTextPartTest.cpp b/tests/parser/htmlTextPartTest.cpp +index 6276db2..c9fa588 100644 +--- a/tests/parser/htmlTextPartTest.cpp ++++ b/tests/parser/htmlTextPartTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/mailboxTest.cpp b/tests/parser/mailboxTest.cpp +index 64b8e45..8411daa 100644 +--- a/tests/parser/mailboxTest.cpp ++++ b/tests/parser/mailboxTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/mediaTypeTest.cpp b/tests/parser/mediaTypeTest.cpp +index 4741bda..c69fd89 100644 +--- a/tests/parser/mediaTypeTest.cpp ++++ b/tests/parser/mediaTypeTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/messageIdSequenceTest.cpp b/tests/parser/messageIdSequenceTest.cpp +index 82d871f..17e9a96 100644 +--- a/tests/parser/messageIdSequenceTest.cpp ++++ b/tests/parser/messageIdSequenceTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/messageIdTest.cpp b/tests/parser/messageIdTest.cpp +index 40e38eb..79154a8 100644 +--- a/tests/parser/messageIdTest.cpp ++++ b/tests/parser/messageIdTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/parameterTest.cpp b/tests/parser/parameterTest.cpp +index f9a6113..fb7a429 100644 +--- a/tests/parser/parameterTest.cpp ++++ b/tests/parser/parameterTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/pathTest.cpp b/tests/parser/pathTest.cpp +index 76a944f..b977061 100644 +--- a/tests/parser/pathTest.cpp ++++ b/tests/parser/pathTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/parser/textTest.cpp b/tests/parser/textTest.cpp +index 152dbc4..5c9b521 100644 +--- a/tests/parser/textTest.cpp ++++ b/tests/parser/textTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/security/digest/md5Test.cpp b/tests/security/digest/md5Test.cpp +index d2049cd..926e023 100644 +--- a/tests/security/digest/md5Test.cpp ++++ b/tests/security/digest/md5Test.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/security/digest/sha1Test.cpp b/tests/security/digest/sha1Test.cpp +index 2de0296..3a73a80 100644 +--- a/tests/security/digest/sha1Test.cpp ++++ b/tests/security/digest/sha1Test.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/testRunner.cpp b/tests/testRunner.cpp +index e286a10..332a14d 100644 +--- a/tests/testRunner.cpp ++++ b/tests/testRunner.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/testUtils.cpp b/tests/testUtils.cpp +index 0fa816c..456b8ad 100644 +--- a/tests/testUtils.cpp ++++ b/tests/testUtils.cpp +@@ -4,7 +4,7 @@ + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/testUtils.hpp b/tests/testUtils.hpp +index 42e8879..96daba8 100644 +--- a/tests/testUtils.hpp ++++ b/tests/testUtils.hpp +@@ -4,7 +4,7 @@ + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/datetimeUtilsTest.cpp b/tests/utility/datetimeUtilsTest.cpp +index 89e8118..4fd3e43 100644 +--- a/tests/utility/datetimeUtilsTest.cpp ++++ b/tests/utility/datetimeUtilsTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/encoderTest.cpp b/tests/utility/encoderTest.cpp +index 648af78..4e2c9a7 100644 +--- a/tests/utility/encoderTest.cpp ++++ b/tests/utility/encoderTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/filteredStreamTest.cpp b/tests/utility/filteredStreamTest.cpp +index bcc785e..ad26e6c 100644 +--- a/tests/utility/filteredStreamTest.cpp ++++ b/tests/utility/filteredStreamTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/pathTest.cpp b/tests/utility/pathTest.cpp +index 6c1e442..1c9b4fb 100644 +--- a/tests/utility/pathTest.cpp ++++ b/tests/utility/pathTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/smartPtrTest.cpp b/tests/utility/smartPtrTest.cpp +index ce0b941..4f68be4 100644 +--- a/tests/utility/smartPtrTest.cpp ++++ b/tests/utility/smartPtrTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/stringProxyTest.cpp b/tests/utility/stringProxyTest.cpp +index e1ba6cb..40648d7 100644 +--- a/tests/utility/stringProxyTest.cpp ++++ b/tests/utility/stringProxyTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/stringUtilsTest.cpp b/tests/utility/stringUtilsTest.cpp +index cbdb688..2144bda 100644 +--- a/tests/utility/stringUtilsTest.cpp ++++ b/tests/utility/stringUtilsTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/tests/utility/urlTest.cpp b/tests/utility/urlTest.cpp +index 245657a..66d1d08 100644 +--- a/tests/utility/urlTest.cpp ++++ b/tests/utility/urlTest.cpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/address.hpp b/vmime/address.hpp +index 31d00f0..188d6ec 100644 +--- a/vmime/address.hpp ++++ b/vmime/address.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/addressList.hpp b/vmime/addressList.hpp +index 7bb7635..2e537c0 100644 +--- a/vmime/addressList.hpp ++++ b/vmime/addressList.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/attachment.hpp b/vmime/attachment.hpp +index 0df96ca..f45ad28 100644 +--- a/vmime/attachment.hpp ++++ b/vmime/attachment.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/attachmentHelper.hpp b/vmime/attachmentHelper.hpp +index f696b7e..3ce86c8 100644 +--- a/vmime/attachmentHelper.hpp ++++ b/vmime/attachmentHelper.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/base.hpp b/vmime/base.hpp +index a25ad7a..ad00d3f 100644 +--- a/vmime/base.hpp ++++ b/vmime/base.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/body.hpp b/vmime/body.hpp +index 30ac798..80c1bb5 100644 +--- a/vmime/body.hpp ++++ b/vmime/body.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/bodyPart.hpp b/vmime/bodyPart.hpp +index b1edafc..47c11cb 100644 +--- a/vmime/bodyPart.hpp ++++ b/vmime/bodyPart.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/bodyPartAttachment.hpp b/vmime/bodyPartAttachment.hpp +index f805b5a..4e1caa0 100644 +--- a/vmime/bodyPartAttachment.hpp ++++ b/vmime/bodyPartAttachment.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/charset.hpp b/vmime/charset.hpp +index 0630692..1d25b74 100644 +--- a/vmime/charset.hpp ++++ b/vmime/charset.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/charsetConverter.hpp b/vmime/charsetConverter.hpp +index 36b52f2..14f0dd9 100644 +--- a/vmime/charsetConverter.hpp ++++ b/vmime/charsetConverter.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/component.hpp b/vmime/component.hpp +index 007cfc0..f30a76c 100644 +--- a/vmime/component.hpp ++++ b/vmime/component.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/constants.hpp b/vmime/constants.hpp +index 30bc6ef..a1a59da 100644 +--- a/vmime/constants.hpp ++++ b/vmime/constants.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software FOUNDATION; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/contentDisposition.hpp b/vmime/contentDisposition.hpp +index 19b13c2..9d1749b 100644 +--- a/vmime/contentDisposition.hpp ++++ b/vmime/contentDisposition.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/contentDispositionField.hpp b/vmime/contentDispositionField.hpp +index d4be481..3474604 100644 +--- a/vmime/contentDispositionField.hpp ++++ b/vmime/contentDispositionField.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/contentHandler.hpp b/vmime/contentHandler.hpp +index 303b08c..aa485f5 100644 +--- a/vmime/contentHandler.hpp ++++ b/vmime/contentHandler.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/contentTypeField.hpp b/vmime/contentTypeField.hpp +index 8712941..bd812e2 100644 +--- a/vmime/contentTypeField.hpp ++++ b/vmime/contentTypeField.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/dateTime.hpp b/vmime/dateTime.hpp +index 0776575..8e99640 100644 +--- a/vmime/dateTime.hpp ++++ b/vmime/dateTime.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/defaultAttachment.hpp b/vmime/defaultAttachment.hpp +index ea3f59c..0d2c3e5 100644 +--- a/vmime/defaultAttachment.hpp ++++ b/vmime/defaultAttachment.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/disposition.hpp b/vmime/disposition.hpp +index 44bde21..05bfca2 100644 +--- a/vmime/disposition.hpp ++++ b/vmime/disposition.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/emptyContentHandler.hpp b/vmime/emptyContentHandler.hpp +index d5aaffd..727c065 100644 +--- a/vmime/emptyContentHandler.hpp ++++ b/vmime/emptyContentHandler.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/encoding.hpp b/vmime/encoding.hpp +index aa99853..fa72dfb 100644 +--- a/vmime/encoding.hpp ++++ b/vmime/encoding.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/exception.hpp b/vmime/exception.hpp +index c96d145..5b68bd7 100644 +--- a/vmime/exception.hpp ++++ b/vmime/exception.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/fileAttachment.hpp b/vmime/fileAttachment.hpp +index dbf1710..0662c8e 100644 +--- a/vmime/fileAttachment.hpp ++++ b/vmime/fileAttachment.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/generatedMessageAttachment.hpp b/vmime/generatedMessageAttachment.hpp +index 47da8a5..58eacbd 100644 +--- a/vmime/generatedMessageAttachment.hpp ++++ b/vmime/generatedMessageAttachment.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/header.hpp b/vmime/header.hpp +index 65236cf..95a9326 100644 +--- a/vmime/header.hpp ++++ b/vmime/header.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/headerField.hpp b/vmime/headerField.hpp +index 3d8f26a..50494c9 100644 +--- a/vmime/headerField.hpp ++++ b/vmime/headerField.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/headerFieldFactory.hpp b/vmime/headerFieldFactory.hpp +index fc074fb..4b1e567 100644 +--- a/vmime/headerFieldFactory.hpp ++++ b/vmime/headerFieldFactory.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/headerFieldValue.hpp b/vmime/headerFieldValue.hpp +index b313d4d..adfdeb2 100644 +--- a/vmime/headerFieldValue.hpp ++++ b/vmime/headerFieldValue.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/htmlTextPart.hpp b/vmime/htmlTextPart.hpp +index 140b4dd..5795eeb 100644 +--- a/vmime/htmlTextPart.hpp ++++ b/vmime/htmlTextPart.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mailbox.hpp b/vmime/mailbox.hpp +index 2717ec5..2072be8 100644 +--- a/vmime/mailbox.hpp ++++ b/vmime/mailbox.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mailboxField.hpp b/vmime/mailboxField.hpp +index 754ac26..edd2d28 100644 +--- a/vmime/mailboxField.hpp ++++ b/vmime/mailboxField.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mailboxGroup.hpp b/vmime/mailboxGroup.hpp +index 8038c06..0061d5b 100644 +--- a/vmime/mailboxGroup.hpp ++++ b/vmime/mailboxGroup.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mailboxList.hpp b/vmime/mailboxList.hpp +index 33b2ace..11e4e79 100644 +--- a/vmime/mailboxList.hpp ++++ b/vmime/mailboxList.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mdn/MDNHelper.hpp b/vmime/mdn/MDNHelper.hpp +index ee9f421..f9764fa 100644 +--- a/vmime/mdn/MDNHelper.hpp ++++ b/vmime/mdn/MDNHelper.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mdn/MDNInfos.hpp b/vmime/mdn/MDNInfos.hpp +index 5b7624c..3c52a60 100644 +--- a/vmime/mdn/MDNInfos.hpp ++++ b/vmime/mdn/MDNInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mdn/receivedMDNInfos.hpp b/vmime/mdn/receivedMDNInfos.hpp +index 685bd79..1c258a2 100644 +--- a/vmime/mdn/receivedMDNInfos.hpp ++++ b/vmime/mdn/receivedMDNInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mdn/sendableMDNInfos.hpp b/vmime/mdn/sendableMDNInfos.hpp +index 451a467..1f766ea 100644 +--- a/vmime/mdn/sendableMDNInfos.hpp ++++ b/vmime/mdn/sendableMDNInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/mediaType.hpp b/vmime/mediaType.hpp +index 59d8020..658b21f 100644 +--- a/vmime/mediaType.hpp ++++ b/vmime/mediaType.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/message.hpp b/vmime/message.hpp +index 449348e..f3be229 100644 +--- a/vmime/message.hpp ++++ b/vmime/message.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/messageAttachment.hpp b/vmime/messageAttachment.hpp +index 2cc3abc..bdd4e8b 100644 +--- a/vmime/messageAttachment.hpp ++++ b/vmime/messageAttachment.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/messageBuilder.hpp b/vmime/messageBuilder.hpp +index b94fe82..0371288 100644 +--- a/vmime/messageBuilder.hpp ++++ b/vmime/messageBuilder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/messageId.hpp b/vmime/messageId.hpp +index 60f62ad..3686b11 100644 +--- a/vmime/messageId.hpp ++++ b/vmime/messageId.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/messageIdSequence.hpp b/vmime/messageIdSequence.hpp +index e1989fe..5dfb840 100644 +--- a/vmime/messageIdSequence.hpp ++++ b/vmime/messageIdSequence.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/messageParser.hpp b/vmime/messageParser.hpp +index 211fac7..c7d5646 100644 +--- a/vmime/messageParser.hpp ++++ b/vmime/messageParser.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/misc/importanceHelper.hpp b/vmime/misc/importanceHelper.hpp +index a139ffb..37f3497 100644 +--- a/vmime/misc/importanceHelper.hpp ++++ b/vmime/misc/importanceHelper.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/connectionInfos.hpp b/vmime/net/connectionInfos.hpp +index 302aecb..03f01b9 100644 +--- a/vmime/net/connectionInfos.hpp ++++ b/vmime/net/connectionInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/defaultConnectionInfos.hpp b/vmime/net/defaultConnectionInfos.hpp +index 0c99684..518b4bc 100644 +--- a/vmime/net/defaultConnectionInfos.hpp ++++ b/vmime/net/defaultConnectionInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/events.hpp b/vmime/net/events.hpp +index 66ce207..be05c6e 100644 +--- a/vmime/net/events.hpp ++++ b/vmime/net/events.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/folder.hpp b/vmime/net/folder.hpp +index 0ae33c5..b20e9c9 100644 +--- a/vmime/net/folder.hpp ++++ b/vmime/net/folder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPConnection.hpp b/vmime/net/imap/IMAPConnection.hpp +index 865a4df..147c4df 100644 +--- a/vmime/net/imap/IMAPConnection.hpp ++++ b/vmime/net/imap/IMAPConnection.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPFolder.hpp b/vmime/net/imap/IMAPFolder.hpp +index 434653a..dec3878 100644 +--- a/vmime/net/imap/IMAPFolder.hpp ++++ b/vmime/net/imap/IMAPFolder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPMessage.hpp b/vmime/net/imap/IMAPMessage.hpp +index caab819..690e5e2 100644 +--- a/vmime/net/imap/IMAPMessage.hpp ++++ b/vmime/net/imap/IMAPMessage.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPParser.hpp b/vmime/net/imap/IMAPParser.hpp +index b307957..0f3e9ec 100644 +--- a/vmime/net/imap/IMAPParser.hpp ++++ b/vmime/net/imap/IMAPParser.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPSStore.hpp b/vmime/net/imap/IMAPSStore.hpp +index efd8126..5772ad9 100644 +--- a/vmime/net/imap/IMAPSStore.hpp ++++ b/vmime/net/imap/IMAPSStore.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPServiceInfos.hpp b/vmime/net/imap/IMAPServiceInfos.hpp +index 82b8c15..7286b3a 100644 +--- a/vmime/net/imap/IMAPServiceInfos.hpp ++++ b/vmime/net/imap/IMAPServiceInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPStore.hpp b/vmime/net/imap/IMAPStore.hpp +index bf8235e..ebff2e6 100644 +--- a/vmime/net/imap/IMAPStore.hpp ++++ b/vmime/net/imap/IMAPStore.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPTag.hpp b/vmime/net/imap/IMAPTag.hpp +index 04c8b94..cab2d48 100644 +--- a/vmime/net/imap/IMAPTag.hpp ++++ b/vmime/net/imap/IMAPTag.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/imap/IMAPUtils.hpp b/vmime/net/imap/IMAPUtils.hpp +index 181bd46..d1ed5c8 100644 +--- a/vmime/net/imap/IMAPUtils.hpp ++++ b/vmime/net/imap/IMAPUtils.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/format/courierMaildirFormat.hpp b/vmime/net/maildir/format/courierMaildirFormat.hpp +index b533abc..e8036d5 100644 +--- a/vmime/net/maildir/format/courierMaildirFormat.hpp ++++ b/vmime/net/maildir/format/courierMaildirFormat.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/format/kmailMaildirFormat.hpp b/vmime/net/maildir/format/kmailMaildirFormat.hpp +index 0dfb964..e5f7222 100644 +--- a/vmime/net/maildir/format/kmailMaildirFormat.hpp ++++ b/vmime/net/maildir/format/kmailMaildirFormat.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/maildirFolder.hpp b/vmime/net/maildir/maildirFolder.hpp +index c0165fa..7474b1a 100644 +--- a/vmime/net/maildir/maildirFolder.hpp ++++ b/vmime/net/maildir/maildirFolder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/maildirFormat.hpp b/vmime/net/maildir/maildirFormat.hpp +index e00dfdf..a47c854 100644 +--- a/vmime/net/maildir/maildirFormat.hpp ++++ b/vmime/net/maildir/maildirFormat.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/maildirMessage.hpp b/vmime/net/maildir/maildirMessage.hpp +index 067bdcb..ba3c88e 100644 +--- a/vmime/net/maildir/maildirMessage.hpp ++++ b/vmime/net/maildir/maildirMessage.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/maildirServiceInfos.hpp b/vmime/net/maildir/maildirServiceInfos.hpp +index 88ac754..f3b0df8 100644 +--- a/vmime/net/maildir/maildirServiceInfos.hpp ++++ b/vmime/net/maildir/maildirServiceInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/maildirStore.hpp b/vmime/net/maildir/maildirStore.hpp +index 0c78943..40ecec3 100644 +--- a/vmime/net/maildir/maildirStore.hpp ++++ b/vmime/net/maildir/maildirStore.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/maildir/maildirUtils.hpp b/vmime/net/maildir/maildirUtils.hpp +index 8c9920b..c4aa0b6 100644 +--- a/vmime/net/maildir/maildirUtils.hpp ++++ b/vmime/net/maildir/maildirUtils.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/message.hpp b/vmime/net/message.hpp +index 2d8dc1a..a0cc1da 100644 +--- a/vmime/net/message.hpp ++++ b/vmime/net/message.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/pop3/POP3Folder.hpp b/vmime/net/pop3/POP3Folder.hpp +index 951abc5..abaa8eb 100644 +--- a/vmime/net/pop3/POP3Folder.hpp ++++ b/vmime/net/pop3/POP3Folder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/pop3/POP3Message.hpp b/vmime/net/pop3/POP3Message.hpp +index ccfa089..5dbea3f 100644 +--- a/vmime/net/pop3/POP3Message.hpp ++++ b/vmime/net/pop3/POP3Message.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/pop3/POP3SStore.hpp b/vmime/net/pop3/POP3SStore.hpp +index 9144f95..1f98bfa 100644 +--- a/vmime/net/pop3/POP3SStore.hpp ++++ b/vmime/net/pop3/POP3SStore.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/pop3/POP3ServiceInfos.hpp b/vmime/net/pop3/POP3ServiceInfos.hpp +index 23bc81d..d2dff58 100644 +--- a/vmime/net/pop3/POP3ServiceInfos.hpp ++++ b/vmime/net/pop3/POP3ServiceInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/pop3/POP3Store.hpp b/vmime/net/pop3/POP3Store.hpp +index 55c0ce4..16fcce4 100644 +--- a/vmime/net/pop3/POP3Store.hpp ++++ b/vmime/net/pop3/POP3Store.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/pop3/POP3Utils.hpp b/vmime/net/pop3/POP3Utils.hpp +index 51bb527..2640c0e 100644 +--- a/vmime/net/pop3/POP3Utils.hpp ++++ b/vmime/net/pop3/POP3Utils.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/securedConnectionInfos.hpp b/vmime/net/securedConnectionInfos.hpp +index 880e6c9..b27d30b 100644 +--- a/vmime/net/securedConnectionInfos.hpp ++++ b/vmime/net/securedConnectionInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/sendmail/sendmailServiceInfos.hpp b/vmime/net/sendmail/sendmailServiceInfos.hpp +index 4c2df63..a86a4dd 100644 +--- a/vmime/net/sendmail/sendmailServiceInfos.hpp ++++ b/vmime/net/sendmail/sendmailServiceInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/sendmail/sendmailTransport.hpp b/vmime/net/sendmail/sendmailTransport.hpp +index 8383e11..5ff8cf2 100644 +--- a/vmime/net/sendmail/sendmailTransport.hpp ++++ b/vmime/net/sendmail/sendmailTransport.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/service.hpp b/vmime/net/service.hpp +index c260f2a..5205fee 100644 +--- a/vmime/net/service.hpp ++++ b/vmime/net/service.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/serviceFactory.hpp b/vmime/net/serviceFactory.hpp +index 730df2e..0362b47 100644 +--- a/vmime/net/serviceFactory.hpp ++++ b/vmime/net/serviceFactory.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/serviceInfos.hpp b/vmime/net/serviceInfos.hpp +index 745f85e..eac77a1 100644 +--- a/vmime/net/serviceInfos.hpp ++++ b/vmime/net/serviceInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/session.hpp b/vmime/net/session.hpp +index 3eb4cfb..426fe7a 100644 +--- a/vmime/net/session.hpp ++++ b/vmime/net/session.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/smtp/SMTPResponse.hpp b/vmime/net/smtp/SMTPResponse.hpp +index 313f6a3..5ef4f09 100644 +--- a/vmime/net/smtp/SMTPResponse.hpp ++++ b/vmime/net/smtp/SMTPResponse.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/smtp/SMTPSTransport.hpp b/vmime/net/smtp/SMTPSTransport.hpp +index 4922ba2..393a4f5 100644 +--- a/vmime/net/smtp/SMTPSTransport.hpp ++++ b/vmime/net/smtp/SMTPSTransport.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/smtp/SMTPServiceInfos.hpp b/vmime/net/smtp/SMTPServiceInfos.hpp +index 15ea735..61f5aa8 100644 +--- a/vmime/net/smtp/SMTPServiceInfos.hpp ++++ b/vmime/net/smtp/SMTPServiceInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/smtp/SMTPTransport.hpp b/vmime/net/smtp/SMTPTransport.hpp +index de0092e..050fedd 100644 +--- a/vmime/net/smtp/SMTPTransport.hpp ++++ b/vmime/net/smtp/SMTPTransport.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/socket.hpp b/vmime/net/socket.hpp +index 88e1f3c..9b0319c 100644 +--- a/vmime/net/socket.hpp ++++ b/vmime/net/socket.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/store.hpp b/vmime/net/store.hpp +index e60721b..1c9ac1c 100644 +--- a/vmime/net/store.hpp ++++ b/vmime/net/store.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/timeoutHandler.hpp b/vmime/net/timeoutHandler.hpp +index 0877ec1..6a20665 100644 +--- a/vmime/net/timeoutHandler.hpp ++++ b/vmime/net/timeoutHandler.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/tls/TLSSecuredConnectionInfos.hpp b/vmime/net/tls/TLSSecuredConnectionInfos.hpp +index 5451633..d0e4087 100644 +--- a/vmime/net/tls/TLSSecuredConnectionInfos.hpp ++++ b/vmime/net/tls/TLSSecuredConnectionInfos.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/tls/TLSSession.hpp b/vmime/net/tls/TLSSession.hpp +index 639babe..e6bd64f 100644 +--- a/vmime/net/tls/TLSSession.hpp ++++ b/vmime/net/tls/TLSSession.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/tls/TLSSocket.hpp b/vmime/net/tls/TLSSocket.hpp +index 1c1d324..5112550 100644 +--- a/vmime/net/tls/TLSSocket.hpp ++++ b/vmime/net/tls/TLSSocket.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/net/transport.hpp b/vmime/net/transport.hpp +index 4ece804..45dc5a5 100644 +--- a/vmime/net/transport.hpp ++++ b/vmime/net/transport.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/object.hpp b/vmime/object.hpp +index 2782189..2a33aed 100644 +--- a/vmime/object.hpp ++++ b/vmime/object.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/options.hpp b/vmime/options.hpp +index 5edb051..7e96c2b 100644 +--- a/vmime/options.hpp ++++ b/vmime/options.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/parameter.hpp b/vmime/parameter.hpp +index 2d21cd1..e1b13a1 100644 +--- a/vmime/parameter.hpp ++++ b/vmime/parameter.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/parameterizedHeaderField.hpp b/vmime/parameterizedHeaderField.hpp +index c2c8502..2940ca3 100644 +--- a/vmime/parameterizedHeaderField.hpp ++++ b/vmime/parameterizedHeaderField.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/parsedMessageAttachment.hpp b/vmime/parsedMessageAttachment.hpp +index e66c6c0..abc2ff5 100644 +--- a/vmime/parsedMessageAttachment.hpp ++++ b/vmime/parsedMessageAttachment.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/parserHelpers.hpp b/vmime/parserHelpers.hpp +index 9be6e4a..9b075f7 100644 +--- a/vmime/parserHelpers.hpp ++++ b/vmime/parserHelpers.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/path.hpp b/vmime/path.hpp +index aa0d8cb..beaa72b 100644 +--- a/vmime/path.hpp ++++ b/vmime/path.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/plainTextPart.hpp b/vmime/plainTextPart.hpp +index c9419b5..72c12ac 100644 +--- a/vmime/plainTextPart.hpp ++++ b/vmime/plainTextPart.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platform.hpp b/vmime/platform.hpp +index 293320f..d390571 100644 +--- a/vmime/platform.hpp ++++ b/vmime/platform.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platforms/posix/posixChildProcess.hpp b/vmime/platforms/posix/posixChildProcess.hpp +index e689065..c25aaca 100644 +--- a/vmime/platforms/posix/posixChildProcess.hpp ++++ b/vmime/platforms/posix/posixChildProcess.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platforms/posix/posixFile.hpp b/vmime/platforms/posix/posixFile.hpp +index b7296c6..70986df 100644 +--- a/vmime/platforms/posix/posixFile.hpp ++++ b/vmime/platforms/posix/posixFile.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platforms/posix/posixHandler.hpp b/vmime/platforms/posix/posixHandler.hpp +index bc78719..397a5dd 100644 +--- a/vmime/platforms/posix/posixHandler.hpp ++++ b/vmime/platforms/posix/posixHandler.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platforms/posix/posixSocket.hpp b/vmime/platforms/posix/posixSocket.hpp +index c230944..0d0dae6 100644 +--- a/vmime/platforms/posix/posixSocket.hpp ++++ b/vmime/platforms/posix/posixSocket.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platforms/windows/windowsFile.hpp b/vmime/platforms/windows/windowsFile.hpp +index 7e81859..a2a9e92 100644 +--- a/vmime/platforms/windows/windowsFile.hpp ++++ b/vmime/platforms/windows/windowsFile.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://vmime.sourceforge.net) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platforms/windows/windowsHandler.hpp b/vmime/platforms/windows/windowsHandler.hpp +index 2f65651..701edf0 100644 +--- a/vmime/platforms/windows/windowsHandler.hpp ++++ b/vmime/platforms/windows/windowsHandler.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://vmime.sourceforge.net) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/platforms/windows/windowsSocket.hpp b/vmime/platforms/windows/windowsSocket.hpp +index 6890ddc..61475c3 100644 +--- a/vmime/platforms/windows/windowsSocket.hpp ++++ b/vmime/platforms/windows/windowsSocket.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://vmime.sourceforge.net) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/propertySet.hpp b/vmime/propertySet.hpp +index 94cf1fd..e5cbf1f 100644 +--- a/vmime/propertySet.hpp ++++ b/vmime/propertySet.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/relay.hpp b/vmime/relay.hpp +index 46b6351..583ad80 100644 +--- a/vmime/relay.hpp ++++ b/vmime/relay.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/authenticator.hpp b/vmime/security/authenticator.hpp +index d339975..a31fc5e 100644 +--- a/vmime/security/authenticator.hpp ++++ b/vmime/security/authenticator.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/cert/X509Certificate.hpp b/vmime/security/cert/X509Certificate.hpp +index e7ca309..b916cff 100644 +--- a/vmime/security/cert/X509Certificate.hpp ++++ b/vmime/security/cert/X509Certificate.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/cert/certificate.hpp b/vmime/security/cert/certificate.hpp +index 440a1a8..b7447fe 100644 +--- a/vmime/security/cert/certificate.hpp ++++ b/vmime/security/cert/certificate.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/cert/certificateChain.hpp b/vmime/security/cert/certificateChain.hpp +index bb21313..02e3d55 100644 +--- a/vmime/security/cert/certificateChain.hpp ++++ b/vmime/security/cert/certificateChain.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/cert/certificateVerifier.hpp b/vmime/security/cert/certificateVerifier.hpp +index e04b11c..cf03826 100644 +--- a/vmime/security/cert/certificateVerifier.hpp ++++ b/vmime/security/cert/certificateVerifier.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/cert/defaultCertificateVerifier.hpp b/vmime/security/cert/defaultCertificateVerifier.hpp +index 5b4bab6..6f650f3 100644 +--- a/vmime/security/cert/defaultCertificateVerifier.hpp ++++ b/vmime/security/cert/defaultCertificateVerifier.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/defaultAuthenticator.hpp b/vmime/security/defaultAuthenticator.hpp +index 641dcfe..dfb8298 100644 +--- a/vmime/security/defaultAuthenticator.hpp ++++ b/vmime/security/defaultAuthenticator.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/digest/md5/md5MessageDigest.hpp b/vmime/security/digest/md5/md5MessageDigest.hpp +index 893cb05..682e7cc 100644 +--- a/vmime/security/digest/md5/md5MessageDigest.hpp ++++ b/vmime/security/digest/md5/md5MessageDigest.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/digest/messageDigest.hpp b/vmime/security/digest/messageDigest.hpp +index 95c3b2b..9e432c7 100644 +--- a/vmime/security/digest/messageDigest.hpp ++++ b/vmime/security/digest/messageDigest.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/digest/messageDigestFactory.hpp b/vmime/security/digest/messageDigestFactory.hpp +index 54d6d76..763d5fa 100644 +--- a/vmime/security/digest/messageDigestFactory.hpp ++++ b/vmime/security/digest/messageDigestFactory.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/digest/sha1/sha1MessageDigest.hpp b/vmime/security/digest/sha1/sha1MessageDigest.hpp +index 129db80..906009a 100644 +--- a/vmime/security/digest/sha1/sha1MessageDigest.hpp ++++ b/vmime/security/digest/sha1/sha1MessageDigest.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/SASLAuthenticator.hpp b/vmime/security/sasl/SASLAuthenticator.hpp +index 76e1c5d..daa090a 100644 +--- a/vmime/security/sasl/SASLAuthenticator.hpp ++++ b/vmime/security/sasl/SASLAuthenticator.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/SASLContext.hpp b/vmime/security/sasl/SASLContext.hpp +index e1d2de4..7703ab1 100644 +--- a/vmime/security/sasl/SASLContext.hpp ++++ b/vmime/security/sasl/SASLContext.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/SASLMechanism.hpp b/vmime/security/sasl/SASLMechanism.hpp +index 3283831..dbb7cd2 100644 +--- a/vmime/security/sasl/SASLMechanism.hpp ++++ b/vmime/security/sasl/SASLMechanism.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/SASLMechanismFactory.hpp b/vmime/security/sasl/SASLMechanismFactory.hpp +index 13d0efd..7b86061 100644 +--- a/vmime/security/sasl/SASLMechanismFactory.hpp ++++ b/vmime/security/sasl/SASLMechanismFactory.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/SASLSession.hpp b/vmime/security/sasl/SASLSession.hpp +index 8c9eca6..79acfa9 100644 +--- a/vmime/security/sasl/SASLSession.hpp ++++ b/vmime/security/sasl/SASLSession.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/SASLSocket.hpp b/vmime/security/sasl/SASLSocket.hpp +index fc6fc39..3ff27e3 100644 +--- a/vmime/security/sasl/SASLSocket.hpp ++++ b/vmime/security/sasl/SASLSocket.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/builtinSASLMechanism.hpp b/vmime/security/sasl/builtinSASLMechanism.hpp +index a1ea531..ac7421c 100644 +--- a/vmime/security/sasl/builtinSASLMechanism.hpp ++++ b/vmime/security/sasl/builtinSASLMechanism.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/security/sasl/defaultSASLAuthenticator.hpp b/vmime/security/sasl/defaultSASLAuthenticator.hpp +index 0b1c06e..a896b65 100644 +--- a/vmime/security/sasl/defaultSASLAuthenticator.hpp ++++ b/vmime/security/sasl/defaultSASLAuthenticator.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/streamContentHandler.hpp b/vmime/streamContentHandler.hpp +index b9e8e97..aa62b2f 100644 +--- a/vmime/streamContentHandler.hpp ++++ b/vmime/streamContentHandler.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/stringContentHandler.hpp b/vmime/stringContentHandler.hpp +index 0e7d1e3..8d36889 100644 +--- a/vmime/stringContentHandler.hpp ++++ b/vmime/stringContentHandler.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/text.hpp b/vmime/text.hpp +index 34427b5..dd4534d 100644 +--- a/vmime/text.hpp ++++ b/vmime/text.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/textPart.hpp b/vmime/textPart.hpp +index 1e8a485..acd9fb3 100644 +--- a/vmime/textPart.hpp ++++ b/vmime/textPart.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/textPartFactory.hpp b/vmime/textPartFactory.hpp +index 89e48e3..3650293 100644 +--- a/vmime/textPartFactory.hpp ++++ b/vmime/textPartFactory.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/types.hpp b/vmime/types.hpp +index de02192..bdf627e 100644 +--- a/vmime/types.hpp ++++ b/vmime/types.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/childProcess.hpp b/vmime/utility/childProcess.hpp +index b4bc257..33cb633 100644 +--- a/vmime/utility/childProcess.hpp ++++ b/vmime/utility/childProcess.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/datetimeUtils.hpp b/vmime/utility/datetimeUtils.hpp +index 23d1a96..b56533c 100644 +--- a/vmime/utility/datetimeUtils.hpp ++++ b/vmime/utility/datetimeUtils.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/b64Encoder.hpp b/vmime/utility/encoder/b64Encoder.hpp +index 831e9f6..6a3a3c6 100644 +--- a/vmime/utility/encoder/b64Encoder.hpp ++++ b/vmime/utility/encoder/b64Encoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/binaryEncoder.hpp b/vmime/utility/encoder/binaryEncoder.hpp +index 783f831..02ff794 100644 +--- a/vmime/utility/encoder/binaryEncoder.hpp ++++ b/vmime/utility/encoder/binaryEncoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/defaultEncoder.hpp b/vmime/utility/encoder/defaultEncoder.hpp +index 3ddad1f..daba3ee 100644 +--- a/vmime/utility/encoder/defaultEncoder.hpp ++++ b/vmime/utility/encoder/defaultEncoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/eightBitEncoder.hpp b/vmime/utility/encoder/eightBitEncoder.hpp +index 2e9b138..2de002f 100644 +--- a/vmime/utility/encoder/eightBitEncoder.hpp ++++ b/vmime/utility/encoder/eightBitEncoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/encoder.hpp b/vmime/utility/encoder/encoder.hpp +index eec0003..49f3c30 100644 +--- a/vmime/utility/encoder/encoder.hpp ++++ b/vmime/utility/encoder/encoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/encoderFactory.hpp b/vmime/utility/encoder/encoderFactory.hpp +index 22f28f4..6abb223 100644 +--- a/vmime/utility/encoder/encoderFactory.hpp ++++ b/vmime/utility/encoder/encoderFactory.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/qpEncoder.hpp b/vmime/utility/encoder/qpEncoder.hpp +index 6af3c90..098b4c8 100644 +--- a/vmime/utility/encoder/qpEncoder.hpp ++++ b/vmime/utility/encoder/qpEncoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/sevenBitEncoder.hpp b/vmime/utility/encoder/sevenBitEncoder.hpp +index 98a999a..2f4870d 100644 +--- a/vmime/utility/encoder/sevenBitEncoder.hpp ++++ b/vmime/utility/encoder/sevenBitEncoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/encoder/uuEncoder.hpp b/vmime/utility/encoder/uuEncoder.hpp +index 6cb5fa1..6289ae0 100644 +--- a/vmime/utility/encoder/uuEncoder.hpp ++++ b/vmime/utility/encoder/uuEncoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/file.hpp b/vmime/utility/file.hpp +index 390c4f4..61ede80 100644 +--- a/vmime/utility/file.hpp ++++ b/vmime/utility/file.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/filteredStream.hpp b/vmime/utility/filteredStream.hpp +index 1e03697..00be785 100644 +--- a/vmime/utility/filteredStream.hpp ++++ b/vmime/utility/filteredStream.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/path.hpp b/vmime/utility/path.hpp +index c4aed26..e43291c 100644 +--- a/vmime/utility/path.hpp ++++ b/vmime/utility/path.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/progressListener.hpp b/vmime/utility/progressListener.hpp +index f26599d..39b884a 100644 +--- a/vmime/utility/progressListener.hpp ++++ b/vmime/utility/progressListener.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/random.hpp b/vmime/utility/random.hpp +index 1db15f5..f706c55 100644 +--- a/vmime/utility/random.hpp ++++ b/vmime/utility/random.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/smartPtr.hpp b/vmime/utility/smartPtr.hpp +index d2a78a6..c448632 100644 +--- a/vmime/utility/smartPtr.hpp ++++ b/vmime/utility/smartPtr.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/smartPtrInt.hpp b/vmime/utility/smartPtrInt.hpp +index a7c7345..453c00e 100644 +--- a/vmime/utility/smartPtrInt.hpp ++++ b/vmime/utility/smartPtrInt.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/stream.hpp b/vmime/utility/stream.hpp +index 5f7bfa2..1faab55 100644 +--- a/vmime/utility/stream.hpp ++++ b/vmime/utility/stream.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/stringProxy.hpp b/vmime/utility/stringProxy.hpp +index d080e67..21c65ea 100644 +--- a/vmime/utility/stringProxy.hpp ++++ b/vmime/utility/stringProxy.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/stringUtils.hpp b/vmime/utility/stringUtils.hpp +index 89fd386..b6589db 100644 +--- a/vmime/utility/stringUtils.hpp ++++ b/vmime/utility/stringUtils.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/url.hpp b/vmime/utility/url.hpp +index 99585b1..7537428 100644 +--- a/vmime/utility/url.hpp ++++ b/vmime/utility/url.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/utility/urlUtils.hpp b/vmime/utility/urlUtils.hpp +index 3d2955a..ba0fbf6 100644 +--- a/vmime/utility/urlUtils.hpp ++++ b/vmime/utility/urlUtils.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/vmime.hpp b/vmime/vmime.hpp +index 0e54d7b..f187b9e 100644 +--- a/vmime/vmime.hpp ++++ b/vmime/vmime.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/word.hpp b/vmime/word.hpp +index 14f8b0e..d787073 100644 +--- a/vmime/word.hpp ++++ b/vmime/word.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, +diff --git a/vmime/wordEncoder.hpp b/vmime/wordEncoder.hpp +index 09c141d..17ca808 100644 +--- a/vmime/wordEncoder.hpp ++++ b/vmime/wordEncoder.hpp +@@ -1,10 +1,10 @@ + // + // VMime library (http://www.vmime.org) +-// Copyright (C) 2002-2008 Vincent Richard ++// Copyright (C) 2002-2009 Vincent Richard + // + // 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 ++// published by the Free Software Foundation; either version 3 of + // the License, or (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, + +commit cc633d7aafc1736a866c34ffda272842fe6a154c +Author: vincent-richard +Date: Mon Sep 14 15:07:06 2009 +0000 + + Added workaround for Decider() for legacy versions of SCons. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@503 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 2e86832..89b58f6 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -439,7 +439,11 @@ EnsureSConsVersion(0, 94) + + SetOption('implicit_cache', 1) + +-Decider('MD5-timestamp') ++try: ++ Decider('MD5-timestamp') ++except: ++ SourceSignatures('MD5') ++ TargetSignatures('build') + + + ############# + +commit 1fade7261d02652f39ffc70fdf29cfad02244732 +Author: vincent-richard +Date: Tue Sep 15 19:36:03 2009 +0000 + + Fixed possible segfault (thanks to John van der Kamp, from Zarafa). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@504 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/messageBuilder.cpp b/src/messageBuilder.cpp +index d619554..a70372f 100644 +--- a/src/messageBuilder.cpp ++++ b/src/messageBuilder.cpp +@@ -142,6 +142,9 @@ ref messageBuilder::construct() const + { + const bodyPart& part = *msg->getBody()->getPartAt(0); + ++ // Make a full copy of the body, otherwise the copyFrom() will delete the body we're copying ++ ref bodyCopy = part.getBody()->clone().dynamicCast (); ++ + // First, copy (and replace) the header fields + const std::vector > fields = part.getHeader()->getFieldList(); + +@@ -153,7 +156,7 @@ ref messageBuilder::construct() const + + // Second, copy the body contents and sub-parts (this also remove + // the body part we are copying...) +- msg->getBody()->copyFrom(*part.getBody()); ++ msg->getBody()->copyFrom(*bodyCopy); + } + + return (msg); + +commit df1b82b80f63d1e4c6f30f8be03dd4b3e859b341 +Author: vincent-richard +Date: Tue Nov 3 12:37:51 2009 +0000 + + Fixed possible segfault (thanks to László Vadócz). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@505 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/utility/stringUtils.cpp b/src/utility/stringUtils.cpp +index 03b2057..abae8f9 100644 +--- a/src/utility/stringUtils.cpp ++++ b/src/utility/stringUtils.cpp +@@ -142,7 +142,7 @@ string::size_type stringUtils::countASCIIchars + { + if (parserHelpers::isAscii(*i)) + { +- if (*i != '=' || *(i + 1) != '?') // To avoid bad behaviour... ++ if (*i != '=' || ((i + 1) != end && *(i + 1) != '?')) // To avoid bad behaviour... + ++count; + } + } + +commit 8391dcfb8e65645d473a0a67e3f5c860d30817b7 +Author: vincent-richard +Date: Tue Nov 3 14:17:55 2009 +0000 + + Reset EOF flag when stream is reset. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@506 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index 4ec2ef3..7ee9f19 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -188,6 +188,8 @@ void posixFileReaderInputStream::reset() + { + if (::lseek(m_fd, 0, SEEK_SET) == off_t(-1)) + posixFileSystemFactory::reportError(m_path, errno); ++ ++ m_eof = false; + } + + +@@ -199,7 +201,7 @@ vmime::utility::stream::size_type posixFileReaderInputStream::read + if ((c = ::read(m_fd, data, count)) == -1) + posixFileSystemFactory::reportError(m_path, errno); + +- if (c == 0) ++ if (c == 0 && count != 0) + m_eof = true; + + return static_cast (c); + +commit 746d6ccc4c9a8c2387f3d4311d7b4c670d8f5e8b +Author: vincent-richard +Date: Wed Nov 4 12:52:49 2009 +0000 + + Removed some unnecessary consts on integral types where overrides conflict. Added to get the std::isspace that doesn't require a 2nd arg 'locale' (thanks to Ben Jackson). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@507 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/windows/windowsFile.cpp b/src/platforms/windows/windowsFile.cpp +index 5412a3b..82c5696 100644 +--- a/src/platforms/windows/windowsFile.cpp ++++ b/src/platforms/windows/windowsFile.cpp +@@ -464,7 +464,7 @@ void windowsFileReaderInputStream::reset() + SetFilePointer(m_hFile, 0, NULL, FILE_BEGIN); + } + +-const vmime::utility::stream::size_type windowsFileReaderInputStream::read(value_type* const data, const size_type count) ++vmime::utility::stream::size_type windowsFileReaderInputStream::read(value_type* const data, const size_type count) + { + DWORD dwBytesRead; + if (!ReadFile(m_hFile, (LPVOID)data, (DWORD)count, &dwBytesRead, NULL)) +@@ -472,7 +472,7 @@ const vmime::utility::stream::size_type windowsFileReaderInputStream::read(value + return dwBytesRead; + } + +-const vmime::utility::stream::size_type windowsFileReaderInputStream::skip(const size_type count) ++vmime::utility::stream::size_type windowsFileReaderInputStream::skip(const size_type count) + { + DWORD dwCurPos = SetFilePointer(m_hFile, 0, NULL, FILE_CURRENT); + DWORD dwNewPos = SetFilePointer(m_hFile, (LONG)count, NULL, FILE_CURRENT); +diff --git a/vmime/base.hpp b/vmime/base.hpp +index ad00d3f..ce544e1 100644 +--- a/vmime/base.hpp ++++ b/vmime/base.hpp +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + + #include "vmime/config.hpp" +diff --git a/vmime/platforms/windows/windowsFile.hpp b/vmime/platforms/windows/windowsFile.hpp +index a2a9e92..6e1c8fb 100644 +--- a/vmime/platforms/windows/windowsFile.hpp ++++ b/vmime/platforms/windows/windowsFile.hpp +@@ -73,7 +73,7 @@ public: + bool canRead() const; + bool canWrite() const; + +- const length_type getLength(); ++ length_type getLength(); + + const path& getFullPath() const; + + +commit eba83b2cb02ef40da3fa519fac6255735cf980b5 +Author: vincent-richard +Date: Wed Nov 4 14:12:06 2009 +0000 + + Auto-detect filename. Renamed 'filename' argument to 'filepath' for disambiguity. Added constructor for input stream. Use 'word' instead of 'string' for filename. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@508 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/fileAttachment.cpp b/src/fileAttachment.cpp +index e643491..da7c4b7 100644 +--- a/src/fileAttachment.cpp ++++ b/src/fileAttachment.cpp +@@ -31,48 +31,93 @@ + + #include "vmime/contentDispositionField.hpp" + ++#include "vmime/platform.hpp" ++#include "vmime/utility/file.hpp" ++ + + namespace vmime + { + + +-fileAttachment::fileAttachment(const string& filename, const mediaType& type) ++fileAttachment::fileAttachment(const string& filepath, const mediaType& type) + { + m_type = type; + +- setData(filename); ++ setData(filepath); + + m_encoding = encoding::decide(m_data); + } + + +-fileAttachment::fileAttachment(const string& filename, const mediaType& type, const text& desc) ++fileAttachment::fileAttachment(const string& filepath, const mediaType& type, const text& desc) + { + m_type = type; + m_desc = desc; + +- setData(filename); ++ setData(filepath); + + m_encoding = encoding::decide(m_data); + } + + +-fileAttachment::fileAttachment(const string& filename, const mediaType& type, ++fileAttachment::fileAttachment(const string& filepath, const mediaType& type, + const text& desc, const encoding& enc) + { + m_type = type; + m_desc = desc; + +- setData(filename); ++ setData(filepath); ++ ++ m_encoding = enc; ++} ++ ++ ++fileAttachment::fileAttachment(ref is, const word& filename, const mediaType& type) ++{ ++ if (!filename.isEmpty()) ++ m_fileInfo.setFilename(filename); ++ ++ m_type = type; ++ ++ setData(is); ++ ++ m_encoding = encoding::decide(m_data); ++} ++ ++ ++fileAttachment::fileAttachment(ref is, const word& filename, ++ const mediaType& type, const text& desc) ++{ ++ if (!filename.isEmpty()) ++ m_fileInfo.setFilename(filename); ++ ++ m_type = type; ++ m_desc = desc; ++ ++ setData(is); ++ ++ m_encoding = encoding::decide(m_data); ++} ++ ++ ++fileAttachment::fileAttachment(ref is, const word& filename, ++ const mediaType& type, const text& desc, const encoding& enc) ++{ ++ if (!filename.isEmpty()) ++ m_fileInfo.setFilename(filename); + ++ m_type = type; ++ m_desc = desc; + m_encoding = enc; ++ ++ setData(is); + } + + +-void fileAttachment::setData(const string& filename) ++void fileAttachment::setData(const string& filepath) + { + std::ifstream* file = new std::ifstream(); +- file->open(filename.c_str(), std::ios::in | std::ios::binary); ++ file->open(filepath.c_str(), std::ios::in | std::ios::binary); + + if (!*file) + { +@@ -82,6 +127,15 @@ void fileAttachment::setData(const string& filename) + + ref is = vmime::create (file, true); + ++ setData(is); ++ ++ utility::file::path path = platform::getHandler()->getFileSystemFactory()->stringToPath(filepath); ++ m_fileInfo.setFilename(path.getLastComponent()); ++} ++ ++ ++void fileAttachment::setData(ref is) ++{ + m_data = vmime::create (is, 0); + } + +@@ -94,7 +148,7 @@ void fileAttachment::generatePart(ref part) const + dynamicCast (); + + if (m_fileInfo.hasSize()) cdf->setSize(utility::stringUtils::toString(m_fileInfo.getSize())); +- if (m_fileInfo.hasFilename()) cdf->setFilename(m_fileInfo.getFilename()); ++ if (m_fileInfo.hasFilename() && !m_fileInfo.getFilename().isEmpty()) cdf->setFilename(m_fileInfo.getFilename()); + if (m_fileInfo.hasCreationDate()) cdf->setCreationDate(m_fileInfo.getCreationDate()); + if (m_fileInfo.hasModificationDate()) cdf->setModificationDate(m_fileInfo.getModificationDate()); + if (m_fileInfo.hasReadDate()) cdf->setReadDate(m_fileInfo.getReadDate()); +@@ -134,8 +188,9 @@ fileAttachment::fileInfo::~fileInfo() + } + + bool fileAttachment::fileInfo::hasFilename() const { return (m_filename != NULL); } +-const string& fileAttachment::fileInfo::getFilename() const { return (*m_filename); } +-void fileAttachment::fileInfo::setFilename(const string& name) { if (m_filename) { *m_filename = name; } else { m_filename = new string(name); } } ++const word& fileAttachment::fileInfo::getFilename() const { return (*m_filename); } ++void fileAttachment::fileInfo::setFilename(const string& name) { if (m_filename) { *m_filename = name; } else { m_filename = new word(name); } } ++void fileAttachment::fileInfo::setFilename(const word& name) { if (m_filename) { *m_filename = name; } else { m_filename = new word(name); } } + + bool fileAttachment::fileInfo::hasCreationDate() const { return (m_creationDate != NULL); } + const datetime& fileAttachment::fileInfo::getCreationDate() const { return (*m_creationDate); } +diff --git a/src/word.cpp b/src/word.cpp +index 958c33e..ce5ddfc 100644 +--- a/src/word.cpp ++++ b/src/word.cpp +@@ -699,6 +699,12 @@ string& word::getBuffer() + } + + ++bool word::isEmpty() const ++{ ++ return m_buffer.empty(); ++} ++ ++ + void word::setBuffer(const string& buffer) + { + m_buffer = buffer; +diff --git a/vmime/fileAttachment.hpp b/vmime/fileAttachment.hpp +index 0662c8e..1516a9d 100644 +--- a/vmime/fileAttachment.hpp ++++ b/vmime/fileAttachment.hpp +@@ -41,9 +41,13 @@ class fileAttachment : public defaultAttachment + { + public: + +- fileAttachment(const string& filename, const mediaType& type); +- fileAttachment(const string& filename, const mediaType& type, const text& desc); +- fileAttachment(const string& filename, const mediaType& type, const text& desc, const encoding& enc); ++ fileAttachment(const string& filepath, const mediaType& type); ++ fileAttachment(const string& filepath, const mediaType& type, const text& desc); ++ fileAttachment(const string& filepath, const mediaType& type, const text& desc, const encoding& enc); ++ ++ fileAttachment(ref is, const word& filename, const mediaType& type); ++ fileAttachment(ref is, const word& filename, const mediaType& type, const text& desc); ++ fileAttachment(ref is, const word& filename, const mediaType& type, const text& desc, const encoding& enc); + + /** Stores information about a file attachment. + */ +@@ -65,7 +69,7 @@ public: + * + * @return file name + */ +- const string& getFilename() const; ++ const word& getFilename() const; + + /** Set the value of the 'filename' property. + * +@@ -73,6 +77,12 @@ public: + */ + void setFilename(const string& name); + ++ /** Set the value of the 'filename' property. ++ * ++ * @param name file name ++ */ ++ void setFilename(const word& name); ++ + /** Check whether the 'creation-date' property is present. + * + * @return true if the 'creation-date' property is set, +@@ -151,7 +161,7 @@ public: + + private: + +- string* m_filename; ++ word* m_filename; + unsigned int* m_size; + datetime* m_creationDate; + datetime* m_modifDate; +@@ -163,7 +173,8 @@ public: + + private: + +- void setData(const string& filename); ++ void setData(const string& filepath); ++ void setData(ref is); + + fileInfo m_fileInfo; + +diff --git a/vmime/word.hpp b/vmime/word.hpp +index d787073..78a88e8 100644 +--- a/vmime/word.hpp ++++ b/vmime/word.hpp +@@ -60,6 +60,12 @@ public: + */ + string& getBuffer(); + ++ /** Tests whether this word is empty. ++ * ++ * @return true if the buffer is empty, false otherwise ++ */ ++ bool isEmpty() const; ++ + /** Set the raw data for this encoded word. + * + * @param buffer raw data buffer + +commit ef738c99e183fe0452394f4f58441cbf0297a7d0 +Author: vincent-richard +Date: Thu Nov 12 15:40:56 2009 +0000 + + Quote mailbox name instead of encoding it whenever it's possible. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@509 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/mailbox.cpp b/src/mailbox.cpp +index 2f62521..f6df516 100644 +--- a/src/mailbox.cpp ++++ b/src/mailbox.cpp +@@ -415,7 +415,7 @@ void mailbox::generate(utility::outputStream& os, const string::size_type maxLin + bool newLine = true; + + m_name.encodeAndFold(os, maxLineLength, pos, &pos, +- forceEncode ? text::FORCE_ENCODING : 0); ++ text::QUOTE_IF_POSSIBLE | (forceEncode ? text::FORCE_ENCODING : 0)); + + if (pos + m_email.length() + 3 > maxLineLength) + { +diff --git a/src/word.cpp b/src/word.cpp +index ce5ddfc..ea8244a 100644 +--- a/src/word.cpp ++++ b/src/word.cpp +@@ -352,10 +352,22 @@ void word::generate(utility::outputStream& os, const string::size_type maxLineLe + noEncoding = false; + } + +- if (noEncoding) ++ // If possible and requested (with flag), quote the buffer (no folding is performed). ++ // Quoting is possible if and only if: ++ // - the whole buffer is ASCII-only ++ // - the buffer does not contain quoting character (") ++ // - there is enough remaining space on the current line to hold the whole buffer ++ if ((flags & text::QUOTE_IF_POSSIBLE) && ++ asciiCount == m_buffer.length() && ++ m_buffer.find('"') == string::npos && ++ (curLineLength + 2 /* 2 x " */ + m_buffer.length()) < maxLineLength) ++ { ++ os << '"' << m_buffer << '"'; ++ curLineLength += 2 + m_buffer.length(); ++ } ++ // We will fold lines without encoding them. ++ else if (noEncoding) + { +- // We will fold lines without encoding them. +- + string::const_iterator lastWSpos = m_buffer.end(); // last white-space position + string::const_iterator curLineStart = m_buffer.begin(); // current line start + +diff --git a/vmime/text.hpp b/vmime/text.hpp +index dd4534d..9760c48 100644 +--- a/vmime/text.hpp ++++ b/vmime/text.hpp +@@ -197,7 +197,8 @@ public: + + FORCE_NO_ENCODING = (1 << 0), /**< Just fold lines, don't encode them. */ + FORCE_ENCODING = (1 << 1), /**< Encode lines even if they are plain ASCII text. */ +- NO_NEW_LINE_SEQUENCE = (1 << 2) /**< Use CRLF instead of new-line sequence (CRLF + TAB). */ ++ NO_NEW_LINE_SEQUENCE = (1 << 2), /**< Use CRLF instead of new-line sequence (CRLF + TAB). */ ++ QUOTE_IF_POSSIBLE = (1 << 3) /**< Use quoting instead of encoding when possible (even if FORCE_ENCODING is specified). */ + }; + + /** Encode and fold text in respect to RFC-2047. + +commit 71e41f1d41ff1f87654e03a5e1247e30311677c2 +Author: vincent-richard +Date: Mon Nov 30 13:04:15 2009 +0000 + + Added block size on sockets to allow different buffer size for SSL. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@510 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/imap/IMAPConnection.cpp b/src/net/imap/IMAPConnection.cpp +index c3ee574..6e5a265 100644 +--- a/src/net/imap/IMAPConnection.cpp ++++ b/src/net/imap/IMAPConnection.cpp +@@ -718,6 +718,12 @@ ref IMAPConnection::getSession() + } + + ++ref IMAPConnection::getSocket() const ++{ ++ return m_socket; ++} ++ ++ + } // imap + } // net + } // vmime +diff --git a/src/net/imap/IMAPFolder.cpp b/src/net/imap/IMAPFolder.cpp +index c06a8d4..0122d21 100644 +--- a/src/net/imap/IMAPFolder.cpp ++++ b/src/net/imap/IMAPFolder.cpp +@@ -1284,7 +1284,11 @@ void IMAPFolder::addMessage(utility::inputStream& is, const int size, const int + if (progress) + progress->start(total); + +- char buffer[65536]; ++ const socket::size_type blockSize = std::min(is.getBlockSize(), ++ static_cast (m_connection->getSocket()->getBlockSize())); ++ ++ std::vector vbuffer(blockSize); ++ char* buffer = &vbuffer.front(); + + while (!is.eof()) + { +diff --git a/src/net/tls/TLSSocket.cpp b/src/net/tls/TLSSocket.cpp +index c2f91f6..dab0338 100644 +--- a/src/net/tls/TLSSocket.cpp ++++ b/src/net/tls/TLSSocket.cpp +@@ -90,6 +90,12 @@ bool TLSSocket::isConnected() const + } + + ++TLSSocket::size_type TLSSocket::getBlockSize() const ++{ ++ return 16384; // 16 KB ++} ++ ++ + void TLSSocket::receive(string& buffer) + { + const int size = receiveRaw(m_buffer, sizeof(m_buffer)); +@@ -103,7 +109,7 @@ void TLSSocket::send(const string& buffer) + } + + +-int TLSSocket::receiveRaw(char* buffer, const int count) ++TLSSocket::size_type TLSSocket::receiveRaw(char* buffer, const size_type count) + { + const ssize_t ret = gnutls_record_recv + (*m_session->m_gnutlsSession, +@@ -124,7 +130,7 @@ int TLSSocket::receiveRaw(char* buffer, const int count) + } + + +-void TLSSocket::sendRaw(const char* buffer, const int count) ++void TLSSocket::sendRaw(const char* buffer, const size_type count) + { + gnutls_record_send + (*m_session->m_gnutlsSession, +diff --git a/src/platforms/posix/posixSocket.cpp b/src/platforms/posix/posixSocket.cpp +index 6740995..807ec47 100644 +--- a/src/platforms/posix/posixSocket.cpp ++++ b/src/platforms/posix/posixSocket.cpp +@@ -217,6 +217,12 @@ void posixSocket::disconnect() + } + + ++posixSocket::size_type posixSocket::getBlockSize() const ++{ ++ return 16384; // 16 KB ++} ++ ++ + void posixSocket::receive(vmime::string& buffer) + { + const int size = receiveRaw(m_buffer, sizeof(m_buffer)); +@@ -224,7 +230,7 @@ void posixSocket::receive(vmime::string& buffer) + } + + +-int posixSocket::receiveRaw(char* buffer, const int count) ++posixSocket::size_type posixSocket::receiveRaw(char* buffer, const size_type count) + { + const int ret = ::recv(m_desc, buffer, count, 0); + +@@ -252,9 +258,9 @@ void posixSocket::send(const vmime::string& buffer) + } + + +-void posixSocket::sendRaw(const char* buffer, const int count) ++void posixSocket::sendRaw(const char* buffer, const size_type count) + { +- int size = count; ++ size_type size = count; + + while (size > 0) + { +diff --git a/src/platforms/windows/windowsSocket.cpp b/src/platforms/windows/windowsSocket.cpp +index 8a42583..3ff9ad5 100644 +--- a/src/platforms/windows/windowsSocket.cpp ++++ b/src/platforms/windows/windowsSocket.cpp +@@ -121,6 +121,12 @@ void windowsSocket::disconnect() + } + + ++windowsSocket::size_type windowsSocket::getBlockSize() const ++{ ++ return 16384; // 16 KB ++} ++ ++ + void windowsSocket::receive(vmime::string& buffer) + { + int ret = ::recv(m_desc, m_buffer, sizeof(m_buffer), 0); +@@ -137,7 +143,7 @@ void windowsSocket::receive(vmime::string& buffer) + } + + +-int windowsSocket::receiveRaw(char* buffer, const int count) ++windowsSocket::size_type windowsSocket::receiveRaw(char* buffer, const size_type count) + { + int ret = ::recv(m_desc, buffer, count, 0); + +@@ -159,7 +165,7 @@ void windowsSocket::send(const vmime::string& buffer) + } + + +-void windowsSocket::sendRaw(const char* buffer, const int count) ++void windowsSocket::sendRaw(const char* buffer, const size_type count) + { + ::send(m_desc, buffer, count, 0); + } +diff --git a/src/security/sasl/SASLSocket.cpp b/src/security/sasl/SASLSocket.cpp +index 118429a..d88153e 100644 +--- a/src/security/sasl/SASLSocket.cpp ++++ b/src/security/sasl/SASLSocket.cpp +@@ -69,6 +69,12 @@ bool SASLSocket::isConnected() const + } + + ++SASLSocket::size_type SASLSocket::getBlockSize() const ++{ ++ return m_wrapped->getBlockSize(); ++} ++ ++ + void SASLSocket::receive(string& buffer) + { + const int n = receiveRaw(m_recvBuffer, sizeof(m_recvBuffer)); +@@ -77,7 +83,7 @@ void SASLSocket::receive(string& buffer) + } + + +-int SASLSocket::receiveRaw(char* buffer, const int count) ++SASLSocket::size_type SASLSocket::receiveRaw(char* buffer, const size_type count) + { + if (m_pendingLen != 0) + { +@@ -141,7 +147,7 @@ void SASLSocket::send(const string& buffer) + } + + +-void SASLSocket::sendRaw(const char* buffer, const int count) ++void SASLSocket::sendRaw(const char* buffer, const size_type count) + { + byte_t* output = 0; + int outputLen = 0; +diff --git a/src/utility/stream.cpp b/src/utility/stream.cpp +index 483784c..ec30b7d 100644 +--- a/src/utility/stream.cpp ++++ b/src/utility/stream.cpp +@@ -470,7 +470,7 @@ void outputStreamSocketAdapter::flush() + + stream::size_type outputStreamSocketAdapter::getBlockSize() + { +- return 16384; // 16 KB ++ return m_socket.getBlockSize(); + } + + +@@ -513,7 +513,7 @@ stream::size_type inputStreamSocketAdapter::skip + + stream::size_type inputStreamSocketAdapter::getBlockSize() + { +- return 16384; // 16 KB ++ return m_socket.getBlockSize(); + } + + +diff --git a/vmime/net/imap/IMAPConnection.hpp b/vmime/net/imap/IMAPConnection.hpp +index 147c4df..820987b 100644 +--- a/vmime/net/imap/IMAPConnection.hpp ++++ b/vmime/net/imap/IMAPConnection.hpp +@@ -96,6 +96,8 @@ public: + bool isSecuredConnection() const; + ref getConnectionInfos() const; + ++ ref getSocket() const; ++ + private: + + void authenticate(); +diff --git a/vmime/net/socket.hpp b/vmime/net/socket.hpp +index 9b0319c..ec6a9d3 100644 +--- a/vmime/net/socket.hpp ++++ b/vmime/net/socket.hpp +@@ -41,6 +41,11 @@ public: + + virtual ~socket() { } + ++ /** Type used for lengths in streams. ++ */ ++ typedef int size_type; ++ ++ + /** Connect to the specified address and port. + * + * @param address server address (this can be a full qualified domain name +@@ -71,7 +76,7 @@ public: + * @param count maximum number of bytes to receive (size of buffer) + * @return number of bytes received/written into output buffer + */ +- virtual int receiveRaw(char* buffer, const int count) = 0; ++ virtual int receiveRaw(char* buffer, const size_type count) = 0; + + /** Send (text) data to the socket. + * +@@ -84,7 +89,14 @@ public: + * @param buffer data to send + * @param count number of bytes to send (size of buffer) + */ +- virtual void sendRaw(const char* buffer, const int count) = 0; ++ virtual void sendRaw(const char* buffer, const size_type count) = 0; ++ ++ /** Return the preferred maximum block size when reading ++ * from or writing to this stream. ++ * ++ * @return block size, in bytes ++ */ ++ virtual size_type getBlockSize() const = 0; + + protected: + +diff --git a/vmime/net/tls/TLSSocket.hpp b/vmime/net/tls/TLSSocket.hpp +index 5112550..7c38970 100644 +--- a/vmime/net/tls/TLSSocket.hpp ++++ b/vmime/net/tls/TLSSocket.hpp +@@ -84,10 +84,12 @@ public: + bool isConnected() const; + + void receive(string& buffer); +- int receiveRaw(char* buffer, const int count); ++ size_type receiveRaw(char* buffer, const size_type count); + + void send(const string& buffer); +- void sendRaw(const char* buffer, const int count); ++ void sendRaw(const char* buffer, const size_type count); ++ ++ size_type getBlockSize() const; + + private: + +diff --git a/vmime/platforms/posix/posixSocket.hpp b/vmime/platforms/posix/posixSocket.hpp +index 0d0dae6..9cd49d4 100644 +--- a/vmime/platforms/posix/posixSocket.hpp ++++ b/vmime/platforms/posix/posixSocket.hpp +@@ -48,10 +48,12 @@ public: + void disconnect(); + + void receive(vmime::string& buffer); +- int receiveRaw(char* buffer, const int count); ++ size_type receiveRaw(char* buffer, const size_type count); + + void send(const vmime::string& buffer); +- void sendRaw(const char* buffer, const int count); ++ void sendRaw(const char* buffer, const size_type count); ++ ++ size_type getBlockSize() const; + + protected: + +diff --git a/vmime/platforms/windows/windowsSocket.hpp b/vmime/platforms/windows/windowsSocket.hpp +index 61475c3..2940157 100644 +--- a/vmime/platforms/windows/windowsSocket.hpp ++++ b/vmime/platforms/windows/windowsSocket.hpp +@@ -50,10 +50,12 @@ public: + void disconnect(); + + void receive(vmime::string& buffer); +- int receiveRaw(char* buffer, const int count); ++ size_type receiveRaw(char* buffer, const size_type count); + + void send(const vmime::string& buffer); +- void sendRaw(const char* buffer, const int count); ++ void sendRaw(const char* buffer, const size_type count); ++ ++ size_type getBlockSize() const; + + private: + +diff --git a/vmime/security/sasl/SASLSocket.hpp b/vmime/security/sasl/SASLSocket.hpp +index 3ff27e3..0348331 100644 +--- a/vmime/security/sasl/SASLSocket.hpp ++++ b/vmime/security/sasl/SASLSocket.hpp +@@ -53,10 +53,12 @@ public: + bool isConnected() const; + + void receive(string& buffer); +- int receiveRaw(char* buffer, const int count); ++ size_type receiveRaw(char* buffer, const size_type count); + + void send(const string& buffer); +- void sendRaw(const char* buffer, const int count); ++ void sendRaw(const char* buffer, const size_type count); ++ ++ size_type getBlockSize() const; + + private: + + +commit 4e36e8816b57fc2f8b34be327f4b67a0366b6664 +Author: vincent-richard +Date: Tue Dec 1 13:23:26 2009 +0000 + + Fixed missing function. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@511 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/tests/testUtils.cpp b/tests/testUtils.cpp +index 456b8ad..ee17c92 100644 +--- a/tests/testUtils.cpp ++++ b/tests/testUtils.cpp +@@ -51,6 +51,12 @@ bool testSocket::isConnected() const + } + + ++testSocket::size_type testSocket::getBlockSize() const ++{ ++ return 16384; ++} ++ ++ + void testSocket::receive(vmime::string& buffer) + { + buffer = m_inBuffer; +diff --git a/tests/testUtils.hpp b/tests/testUtils.hpp +index 96daba8..227d1b3 100644 +--- a/tests/testUtils.hpp ++++ b/tests/testUtils.hpp +@@ -216,6 +216,8 @@ public: + int receiveRaw(char* buffer, const int count); + void sendRaw(const char* buffer, const int count); + ++ size_type getBlockSize() const; ++ + /** Send data to client. + * + * @buffer data to send + +commit fdc04f8dfd184c980b0a34d0297c41b5831edab0 +Author: vincent-richard +Date: Tue Dec 1 13:24:38 2009 +0000 + + Added and moved tests for RFC-2231. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@512 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/tests/parser/parameterTest.cpp b/tests/parser/parameterTest.cpp +index fb7a429..6d24438 100644 +--- a/tests/parser/parameterTest.cpp ++++ b/tests/parser/parameterTest.cpp +@@ -32,7 +32,9 @@ VMIME_TEST_SUITE_BEGIN + + VMIME_TEST_LIST_BEGIN + VMIME_TEST(testParse) ++ VMIME_TEST(testParseRFC2231) + VMIME_TEST(testGenerate) ++ VMIME_TEST(testGenerateRFC2231) + VMIME_TEST(testNonStandardEncodedParam) + VMIME_TEST_LIST_END + +@@ -134,57 +136,60 @@ VMIME_TEST_SUITE_BEGIN + VASSERT_EQ("7.1", 1, p7.getParameterCount()); + VASSERT_EQ("7.2", "param1", PARAM_NAME(p7, 0)); + VASSERT_EQ("7.3", "this is a slash: \"\\\"", PARAM_VALUE(p7, 0)); ++ } + ++ void testParseRFC2231() ++ { + // Extended parameter with charset specified in more than one + // section (this is forbidden by RFC, but is should not fail) +- parameterizedHeaderField p8; +- p8.parse("X; param1*0*=charset1'language1'value1;\r\n" +- " param1*1*=charset2'language2'value2;"); ++ parameterizedHeaderField p1; ++ p1.parse("X; param1*0*=charset1'language1'value1;\r\n" ++ " param1*1*=charset2'language2'value2;"); + +- VASSERT_EQ("8.1", 1, p8.getParameterCount()); +- VASSERT_EQ("8.2", "param1", PARAM_NAME(p8, 0)); +- VASSERT_EQ("8.3", "charset1", PARAM_CHARSET(p8, 0)); +- VASSERT_EQ("8.4", "value1charset2'language2'value2", PARAM_BUFFER(p8, 0)); ++ VASSERT_EQ("1.1", 1, p1.getParameterCount()); ++ VASSERT_EQ("1.2", "param1", PARAM_NAME(p1, 0)); ++ VASSERT_EQ("1.3", "charset1", PARAM_CHARSET(p1, 0)); ++ VASSERT_EQ("1.4", "value1charset2'language2'value2", PARAM_BUFFER(p1, 0)); + + // Charset not specified in the first section (that is not encoded), + // but specified in the second one (legal) +- parameterizedHeaderField p9; +- p9.parse("X; param1*0=value1;\r\n" +- " param1*1*=charset'language'value2;"); ++ parameterizedHeaderField p2; ++ p2.parse("X; param1*0=value1;\r\n" ++ " param1*1*=charset'language'value2;"); + +- VASSERT_EQ("9.1", 1, p9.getParameterCount()); +- VASSERT_EQ("9.2", "param1", PARAM_NAME(p9, 0)); +- VASSERT_EQ("9.3", "charset", PARAM_CHARSET(p9, 0)); +- VASSERT_EQ("9.4", "value1value2", PARAM_BUFFER(p9, 0)); ++ VASSERT_EQ("2.1", 1, p2.getParameterCount()); ++ VASSERT_EQ("2.2", "param1", PARAM_NAME(p2, 0)); ++ VASSERT_EQ("2.3", "charset", PARAM_CHARSET(p2, 0)); ++ VASSERT_EQ("2.4", "value1value2", PARAM_BUFFER(p2, 0)); + + // Characters prefixed with '%' in a simple (not extended) section + // should not be decoded +- parameterizedHeaderField p10; +- p10.parse("X; param1=val%20ue1"); ++ parameterizedHeaderField p3; ++ p3.parse("X; param1=val%20ue1"); + +- VASSERT_EQ("10.1", 1, p10.getParameterCount()); +- VASSERT_EQ("10.2", "param1", PARAM_NAME(p10, 0)); +- VASSERT_EQ("10.3", "val%20ue1", PARAM_VALUE(p10, 0)); ++ VASSERT_EQ("3.1", 1, p3.getParameterCount()); ++ VASSERT_EQ("3.2", "param1", PARAM_NAME(p3, 0)); ++ VASSERT_EQ("3.3", "val%20ue1", PARAM_VALUE(p3, 0)); + + // Multiple sections + charset specified and encoding +- parameterizedHeaderField p11; +- p11.parse("X; param1*0*=charset'language'value1a%20;" +- " param1*1*=value1b%20;" +- " param1*2=value1c"); ++ parameterizedHeaderField p4; ++ p4.parse("X; param1*0*=charset'language'value1a%20;" ++ " param1*1*=value1b%20;" ++ " param1*2=value1c"); + +- VASSERT_EQ("11.1", 1, p11.getParameterCount()); +- VASSERT_EQ("11.2", "param1", PARAM_NAME(p11, 0)); +- VASSERT_EQ("11.3", "charset", PARAM_CHARSET(p11, 0)); +- VASSERT_EQ("11.4", "value1a value1b value1c", PARAM_BUFFER(p11, 0)); ++ VASSERT_EQ("4.1", 1, p4.getParameterCount()); ++ VASSERT_EQ("4.2", "param1", PARAM_NAME(p4, 0)); ++ VASSERT_EQ("4.3", "charset", PARAM_CHARSET(p4, 0)); ++ VASSERT_EQ("4.4", "value1a value1b value1c", PARAM_BUFFER(p4, 0)); + + // No charset specified: defaults to US-ASCII +- parameterizedHeaderField p12; +- p12.parse("X; param1*='language'value1"); ++ parameterizedHeaderField p5; ++ p5.parse("X; param1*='language'value1"); + +- VASSERT_EQ("12.1", 1, p12.getParameterCount()); +- VASSERT_EQ("12.2", "param1", PARAM_NAME(p12, 0)); +- VASSERT_EQ("12.3", "us-ascii", PARAM_CHARSET(p12, 0)); +- VASSERT_EQ("12.4", "value1", PARAM_BUFFER(p12, 0)); ++ VASSERT_EQ("5.1", 1, p5.getParameterCount()); ++ VASSERT_EQ("5.2", "param1", PARAM_NAME(p5, 0)); ++ VASSERT_EQ("5.3", "us-ascii", PARAM_CHARSET(p5, 0)); ++ VASSERT_EQ("5.4", "value1", PARAM_BUFFER(p5, 0)); + } + + void testGenerate() +@@ -206,21 +211,24 @@ VMIME_TEST_SUITE_BEGIN + p2b.appendParameter(vmime::create ("param1", "va\\lue\"1")); + + VASSERT_EQ("2b", "F: X; param1=\"va\\\\lue\\\"1\"", p2b.generate()); ++ } + ++ void testGenerateRFC2231() ++ { + // Extended parameter with charset specifier +- parameterizedHeaderField p3; +- p3.appendParameter(vmime::create ("param1", ++ parameterizedHeaderField p1; ++ p1.appendParameter(vmime::create ("param1", + vmime::word("value 1\xe9", vmime::charset("charset")))); + +- VASSERT_EQ("3", "F: X; param1=\"value 1\";param1*=charset''value%201%E9", p3.generate()); ++ VASSERT_EQ("1", "F: X; param1=\"value 1\";param1*=charset''value%201%E9", p1.generate()); + + // Value that spans on multiple lines +- parameterizedHeaderField p4; +- p4.appendParameter(vmime::create ("param1", ++ parameterizedHeaderField p2; ++ p2.appendParameter(vmime::create ("param1", + vmime::word("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", + vmime::charset("charset")))); + +- VASSERT_EQ("4", "F: X; \r\n " ++ VASSERT_EQ("2", "F: X; \r\n " + "param1=abcdefghijklm;\r\n " + "param1*0*=charset''abc;\r\n " + "param1*1*=defghijkl;\r\n " +@@ -228,7 +236,23 @@ VMIME_TEST_SUITE_BEGIN + "param1*3*=vwxyzABCD;\r\n " + "param1*4*=EFGHIJKLM;\r\n " + "param1*5*=NOPQRSTUV;\r\n " +- "param1*6*=WXYZ", p4.generate(25)); // max line length = 25 ++ "param1*6*=WXYZ", p2.generate(25)); // max line length = 25 ++ ++ // Non-ASCII parameter value ++ parameterizedHeaderField p3; ++ p3.appendParameter(vmime::create ("param1", ++ vmime::word("δσσσσσσσσσσσσσσσσσσσσδσδα δσαδσδσαδσαδασδασ δσαδασδσα δσαδασδσα δασδασδασ δασαχφδδσα 2008.doc", ++ vmime::charset("utf-8")))); ++ ++ VASSERT_EQ("3", "F: X; \r\n " ++ "param1=\" 2008.doc\";param1*0*=utf-8''%CE%B4%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " ++ "param1*1*=%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " ++ "param1*2*=%CE%B4%CF%83%CE%B4%CE%B1%20%CE%B4%CF%83%CE%B1%CE%B4%CF%83%CE%B4%CF;\r\n " ++ "param1*3*=%83%CE%B1%CE%B4%CF%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CE%B1%CF%83%20;\r\n " ++ "param1*4*=%CE%B4%CF%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CF%83%CE%B1%20%CE%B4%CF;\r\n " ++ "param1*5*=%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CF%83%CE%B1%20%CE%B4%CE%B1%CF%83;\r\n " ++ "param1*6*=%CE%B4%CE%B1%CF%83%CE%B4%CE%B1%CF%83%20%CE%B4%CE%B1%CF%83%CE%B1%CF;\r\n " ++ "param1*7*=%87%CF%86%CE%B4%CE%B4%CF%83%CE%B1%202008.doc", p3.generate(80)); + } + + void testNonStandardEncodedParam() + +commit 6687ee18d8364bb3c5da17199abf55213d2fc665 +Author: vincent-richard +Date: Tue Dec 1 13:44:34 2009 +0000 + + Added option to return ISO week-numbering instead of default calendar-numbering. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@513 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/utility/datetimeUtils.cpp b/src/utility/datetimeUtils.cpp +index cf05a93..6ea5be6 100644 +--- a/src/utility/datetimeUtils.cpp ++++ b/src/utility/datetimeUtils.cpp +@@ -256,7 +256,7 @@ int datetimeUtils::getDayOfWeek(const int year, const int month, const int day) + } + + +-int datetimeUtils::getWeekOfYear(const int year, const int month, const int day) ++int datetimeUtils::getWeekOfYear(const int year, const int month, const int day, const bool iso) + { + // Algorithm from http://personal.ecu.edu/mccartyr/ISOwdALG.txt + +@@ -322,7 +322,7 @@ int datetimeUtils::getWeekOfYear(const int year, const int month, const int day) + WeekNumber -= 1; + } + +- if (WeekNumber == 1 && month == 12) ++ if (!iso && (WeekNumber == 1 && month == 12)) + WeekNumber = 53; + + return WeekNumber; +diff --git a/tests/utility/datetimeUtilsTest.cpp b/tests/utility/datetimeUtilsTest.cpp +index 4fd3e43..4671e75 100644 +--- a/tests/utility/datetimeUtilsTest.cpp ++++ b/tests/utility/datetimeUtilsTest.cpp +@@ -143,10 +143,11 @@ VMIME_TEST_SUITE_BEGIN + { + VASSERT_EQ("1.1", 52, datetimeUtils::getWeekOfYear(2003, 12, 27)); + VASSERT_EQ("1.2", 52, datetimeUtils::getWeekOfYear(2003, 12, 28)); +- VASSERT_EQ("1.3", 1, datetimeUtils::getWeekOfYear(2003, 12, 29)); +- VASSERT_EQ("1.4", 1, datetimeUtils::getWeekOfYear(2004, 1, 4)); +- VASSERT_EQ("1.5", 2, datetimeUtils::getWeekOfYear(2004, 1, 5)); +- VASSERT_EQ("1.6", 2, datetimeUtils::getWeekOfYear(2004, 1, 11)); ++ VASSERT_EQ("1.3", 1, datetimeUtils::getWeekOfYear(2003, 12, 29, true)); ++ VASSERT_EQ("1.4", 53, datetimeUtils::getWeekOfYear(2003, 12, 29, false)); ++ VASSERT_EQ("1.5", 1, datetimeUtils::getWeekOfYear(2004, 1, 4)); ++ VASSERT_EQ("1.6", 2, datetimeUtils::getWeekOfYear(2004, 1, 5)); ++ VASSERT_EQ("1.7", 2, datetimeUtils::getWeekOfYear(2004, 1, 11)); + + VASSERT_EQ("2.1", 52, datetimeUtils::getWeekOfYear(2004, 12, 26)); + VASSERT_EQ("2.2", 53, datetimeUtils::getWeekOfYear(2004, 12, 27)); +diff --git a/vmime/utility/datetimeUtils.hpp b/vmime/utility/datetimeUtils.hpp +index b56533c..d5f89be 100644 +--- a/vmime/utility/datetimeUtils.hpp ++++ b/vmime/utility/datetimeUtils.hpp +@@ -84,9 +84,11 @@ public: + * @param year year in 4-digit format + * @param month month (1-12), January is 1, December is 12 (see datetime::Months enum) + * @param day month day (1-31) ++ * @param iso if TRUE, use ISO week-numbering year (default is to use calendar year). ++ * For more information, read here: http://en.wikipedia.org/wiki/ISO_8601#Week_dates + * @return the week number (1 is the first week of the year) + */ +- static int getWeekOfYear(const int year, const int month, const int day); ++ static int getWeekOfYear(const int year, const int month, const int day, const bool iso = false); + }; + + + +commit 3b5ccb4334651cc9ba9b99259d44dc9e47d8e22a +Author: vincent-richard +Date: Tue Dec 1 14:24:55 2009 +0000 + + Fixed directory renaming. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@514 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index 7ee9f19..b814b75 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -396,7 +396,11 @@ void posixFile::rename(const path& newName) + const vmime::string newNativePath = posixFileSystemFactory::pathToStringImpl(newName); + + posixFile dest(newName); +- dest.createFile(); ++ ++ if (isDirectory()) ++ dest.createDirectory(); ++ else ++ dest.createFile(); + + if (::rename(m_nativePath.c_str(), newNativePath.c_str()) == -1) + posixFileSystemFactory::reportError(m_path, errno); +diff --git a/tests/net/maildir/maildirStoreTest.cpp b/tests/net/maildir/maildirStoreTest.cpp +index 5aad90b..5f8c703 100644 +--- a/tests/net/maildir/maildirStoreTest.cpp ++++ b/tests/net/maildir/maildirStoreTest.cpp +@@ -322,12 +322,28 @@ public: + + void testRenameFolder_KMail() + { +- testRenameFolderImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); ++ try ++ { ++ testRenameFolderImpl(TEST_MAILDIR_KMAIL, TEST_MAILDIRFILES_KMAIL); ++ } ++ catch (vmime::exception& e) ++ { ++ std::cerr << e; ++ throw e; ++ } + } + + void testRenameFolder_Courier() + { +- testRenameFolderImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); ++ try ++ { ++ testRenameFolderImpl(TEST_MAILDIR_COURIER, TEST_MAILDIRFILES_COURIER); ++ } ++ catch (vmime::exception& e) ++ { ++ std::cerr << e; ++ throw e; ++ } + } + + void testRenameFolderImpl(const vmime::string* const dirs, const vmime::string* const files) +diff --git a/tests/testUtils.cpp b/tests/testUtils.cpp +index ee17c92..36455cf 100644 +--- a/tests/testUtils.cpp ++++ b/tests/testUtils.cpp +@@ -187,3 +187,61 @@ vmime::ref testTimeoutHandlerFactory::create() + return vmime::create (); + } + ++ ++ ++// Exception helper ++std::ostream& operator<<(std::ostream& os, const vmime::exception& e) ++{ ++ os << "* vmime::exceptions::" << e.name() << std::endl; ++ os << " what = " << e.what() << std::endl; ++ ++ // More information for special exceptions ++ if (dynamic_cast (&e)) ++ { ++ const vmime::exceptions::command_error& cee = ++ dynamic_cast (e); ++ ++ os << " command = " << cee.command() << std::endl; ++ os << " response = " << cee.response() << std::endl; ++ } ++ ++ if (dynamic_cast (&e)) ++ { ++ const vmime::exceptions::invalid_response& ir = ++ dynamic_cast (e); ++ ++ os << " response = " << ir.response() << std::endl; ++ } ++ ++ if (dynamic_cast (&e)) ++ { ++ const vmime::exceptions::connection_greeting_error& cgee = ++ dynamic_cast (e); ++ ++ os << " response = " << cgee.response() << std::endl; ++ } ++ ++ if (dynamic_cast (&e)) ++ { ++ const vmime::exceptions::authentication_error& aee = ++ dynamic_cast (e); ++ ++ os << " response = " << aee.response() << std::endl; ++ } ++ ++ if (dynamic_cast (&e)) ++ { ++ const vmime::exceptions::filesystem_exception& fse = ++ dynamic_cast (e); ++ ++ os << " path = " << vmime::platform::getHandler()-> ++ getFileSystemFactory()->pathToString(fse.path()) << std::endl; ++ } ++ ++ if (e.other() != NULL) ++ os << *e.other(); ++ ++ return os; ++} ++ ++ +diff --git a/tests/testUtils.hpp b/tests/testUtils.hpp +index 227d1b3..9aee153 100644 +--- a/tests/testUtils.hpp ++++ b/tests/testUtils.hpp +@@ -305,3 +305,7 @@ public: + vmime::ref create(); + }; + ++ ++// Exception helper ++std::ostream& operator<<(std::ostream& os, const vmime::exception& e); ++ + +commit 75b25e29e28fd00ae2e92c28baed98f62838e119 +Author: vincent-richard +Date: Wed Dec 2 11:49:00 2009 +0000 + + Fixed compilation issue with Intel Compiler (thanks to Eric Trinh for report). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@515 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/vmime/propertySet.hpp b/vmime/propertySet.hpp +index e5cbf1f..e5e91dd 100644 +--- a/vmime/propertySet.hpp ++++ b/vmime/propertySet.hpp +@@ -432,7 +432,7 @@ public: + + #ifndef VMIME_INLINE_TEMPLATE_SPECIALIZATION + +-template <> void propertySet::property::setValue(const string& value); ++template <> void propertySet::property::setValue (const string& value); + template <> void propertySet::property::setValue(const bool& value); + + template <> string propertySet::property::getValue() const; + +commit e46c5fc23527db2409e872020f0e007f98e13c2d +Author: vincent-richard +Date: Tue Dec 8 09:31:06 2009 +0000 + + Initialize multi-threading for GNUTLS/GCrypt (thanks to Bartek Szurgot). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@516 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/tls/TLSSession.cpp b/src/net/tls/TLSSession.cpp +index 1146d1b..d4eab3e 100644 +--- a/src/net/tls/TLSSession.cpp ++++ b/src/net/tls/TLSSession.cpp +@@ -24,6 +24,13 @@ + #include + #include + ++#include "vmime/config.hpp" ++ ++#if VMIME_HAVE_PTHREAD ++# include ++# include ++#endif // VMIME_HAVE_PTHREAD ++ + #include "vmime/net/tls/TLSSession.hpp" + + #include "vmime/exception.hpp" +@@ -38,6 +45,14 @@ + #endif // VMIME_DEBUG && GNUTLS_DEBUG + + ++#if VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL) ++extern "C" ++{ ++ GCRY_THREAD_OPTION_PTHREAD_IMPL; ++} ++#endif // VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL ++ ++ + namespace vmime { + namespace net { + namespace tls { +@@ -50,6 +65,10 @@ struct TLSGlobal + { + TLSGlobal() + { ++#if VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL) ++ gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); ++#endif // VMIME_HAVE_PTHREAD && defined(GCRY_THREAD_OPTION_PTHREAD_IMPL ++ + gnutls_global_init(); + //gnutls_global_init_extra(); + + +commit 9e4d59d30924211495daf8c96fa8bb94537a9447 +Author: vincent-richard +Date: Tue Dec 8 10:03:34 2009 +0000 + + Fixed not exception-safe constructor, which could lead to possible memory leak (thanks to Bartek Szurgot). Get rid of const-ness on factories. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@517 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/AUTHORS b/AUTHORS +index 8391c18..f0b5e2d 100644 +--- a/AUTHORS ++++ b/AUTHORS +@@ -19,6 +19,7 @@ VMIME CONTRIBUTORS + - Georg Sauthoff + - Pierre Thierry (patches for STL algorithms) + - Zarafa ++ - Bartek Szurgot + + Please apologize if I have forgotten someone here. ;) + See SVN Changelog for full list. +diff --git a/src/net/maildir/format/courierMaildirFormat.cpp b/src/net/maildir/format/courierMaildirFormat.cpp +index 6dbda80..721517e 100644 +--- a/src/net/maildir/format/courierMaildirFormat.cpp ++++ b/src/net/maildir/format/courierMaildirFormat.cpp +@@ -49,7 +49,7 @@ const string courierMaildirFormat::getName() const + + void courierMaildirFormat::createFolder(const folder::path& path) + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + if (!fsf->isValidPath(folderPathToFileSystemPath(path, ROOT_DIRECTORY))) + throw exceptions::invalid_folder_name(); +@@ -80,7 +80,7 @@ void courierMaildirFormat::createFolder(const folder::path& path) + + void courierMaildirFormat::destroyFolder(const folder::path& path) + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + // Recursively delete directories of subfolders + const std::vector folders = listFolders(path, true); +@@ -119,7 +119,7 @@ void courierMaildirFormat::renameFolder + void courierMaildirFormat::renameFolderImpl + (const folder::path& oldPath, const folder::path& newPath) + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + const utility::file::path oldFSPath = + folderPathToFileSystemPath(oldPath, ROOT_DIRECTORY); +@@ -134,7 +134,7 @@ void courierMaildirFormat::renameFolderImpl + + bool courierMaildirFormat::folderExists(const folder::path& path) const + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref rootDir = fsf->create + (folderPathToFileSystemPath(path, ROOT_DIRECTORY)); +@@ -254,7 +254,7 @@ const std::vector courierMaildirFormat::listFolders + bool courierMaildirFormat::listDirectories(const folder::path& root, + std::vector & dirs, const bool onlyTestForExistence) const + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref rootDir = fsf->create + (getContext()->getStore()->getFileSystemPath()); +@@ -496,7 +496,7 @@ const folder::path::component courierMaildirFormat::fromModifiedUTF7(const strin + + bool courierMaildirFormat::supports() const + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref rootDir = fsf->create + (getContext()->getStore()->getFileSystemPath()); +diff --git a/src/net/maildir/format/kmailMaildirFormat.cpp b/src/net/maildir/format/kmailMaildirFormat.cpp +index 5fb75fe..a21d106 100644 +--- a/src/net/maildir/format/kmailMaildirFormat.cpp ++++ b/src/net/maildir/format/kmailMaildirFormat.cpp +@@ -49,7 +49,7 @@ const string kmailMaildirFormat::getName() const + + void kmailMaildirFormat::createFolder(const folder::path& path) + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + if (!fsf->isValidPath(folderPathToFileSystemPath(path, ROOT_DIRECTORY))) + throw exceptions::invalid_folder_name(); +@@ -75,7 +75,7 @@ void kmailMaildirFormat::createFolder(const folder::path& path) + void kmailMaildirFormat::destroyFolder(const folder::path& path) + { + // Delete 'folder' and '.folder.directory' directories +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + maildirUtils::recursiveFSDelete(fsf->create + (folderPathToFileSystemPath(path, ROOT_DIRECTORY))); // root +@@ -87,7 +87,7 @@ void kmailMaildirFormat::destroyFolder(const folder::path& path) + + bool kmailMaildirFormat::folderExists(const folder::path& path) const + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref rootDir = fsf->create + (folderPathToFileSystemPath(path, ROOT_DIRECTORY)); +@@ -177,7 +177,7 @@ const std::vector kmailMaildirFormat::listFolders + void kmailMaildirFormat::listFoldersImpl + (std::vector & list, const folder::path& root, const bool recursive) const + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref rootDir = fsf->create(folderPathToFileSystemPath(root, + root.isEmpty() ? ROOT_DIRECTORY : CONTAINER_DIRECTORY)); +@@ -226,7 +226,7 @@ bool kmailMaildirFormat::isSubfolderDirectory(const utility::file& file) + + void kmailMaildirFormat::renameFolder(const folder::path& oldPath, const folder::path& newPath) + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref rootDir = fsf->create + (folderPathToFileSystemPath(oldPath, ROOT_DIRECTORY)); +@@ -277,7 +277,7 @@ void kmailMaildirFormat::renameFolder(const folder::path& oldPath, const folder: + + bool kmailMaildirFormat::folderHasSubfolders(const folder::path& path) const + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref rootDir = fsf->create + (folderPathToFileSystemPath(path, CONTAINER_DIRECTORY)); +diff --git a/src/net/maildir/maildirFolder.cpp b/src/net/maildir/maildirFolder.cpp +index 3e361ae..dd680c9 100644 +--- a/src/net/maildir/maildirFolder.cpp ++++ b/src/net/maildir/maildirFolder.cpp +@@ -264,7 +264,7 @@ void maildirFolder::scanFolder() + m_messageCount = 0; + m_unreadMessageCount = 0; + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + utility::file::path newDirPath = store->getFormat()->folderPathToFileSystemPath + (m_path, maildirFormat::NEW_DIRECTORY); +@@ -760,7 +760,7 @@ void maildirFolder::setMessageFlagsImpl + { + ref store = m_store.acquire(); + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + utility::file::path curDirPath = store->getFormat()-> + folderPathToFileSystemPath(m_path, maildirFormat::CUR_DIRECTORY); +@@ -832,7 +832,7 @@ void maildirFolder::addMessage(utility::inputStream& is, const int size, + else if (m_mode == MODE_READ_ONLY) + throw exceptions::illegal_state("Folder is read-only"); + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + utility::file::path tmpDirPath = store->getFormat()-> + folderPathToFileSystemPath(m_path,maildirFormat::TMP_DIRECTORY); +@@ -918,7 +918,7 @@ void maildirFolder::copyMessageImpl(const utility::file::path& tmpDirPath, + utility::inputStream& is, const utility::stream::size_type size, + utility::progressListener* progress) + { +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + ref file = fsf->create(tmpDirPath / filename); + +@@ -1058,7 +1058,7 @@ void maildirFolder::copyMessagesImpl(const folder::path& dest, const std::vector + { + ref store = m_store.acquire(); + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + utility::file::path curDirPath = store->getFormat()->folderPathToFileSystemPath + (m_path, maildirFormat::CUR_DIRECTORY); +@@ -1200,7 +1200,7 @@ void maildirFolder::expunge() + else if (m_mode == MODE_READ_ONLY) + throw exceptions::illegal_state("Folder is read-only"); + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + utility::file::path curDirPath = store->getFormat()-> + folderPathToFileSystemPath(m_path, maildirFormat::CUR_DIRECTORY); +diff --git a/src/net/maildir/maildirMessage.cpp b/src/net/maildir/maildirMessage.cpp +index ed87cdb..8999d84 100644 +--- a/src/net/maildir/maildirMessage.cpp ++++ b/src/net/maildir/maildirMessage.cpp +@@ -346,7 +346,7 @@ void maildirMessage::extractImpl(utility::outputStream& os, utility::progressLis + { + ref folder = m_folder.acquire(); + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + const utility::file::path path = folder->getMessageFSPath(m_num); + ref file = fsf->create(path); +@@ -393,7 +393,7 @@ void maildirMessage::fetchPartHeader(ref p) + + ref mp = p.dynamicCast (); + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + const utility::file::path path = folder->getMessageFSPath(m_num); + ref file = fsf->create(path); +@@ -430,7 +430,7 @@ void maildirMessage::fetch(ref msgFolder, const int options) + if (folder != msgFolder) + throw exceptions::folder_not_found(); + +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + const utility::file::path path = folder->getMessageFSPath(m_num); + ref file = fsf->create(path); +diff --git a/src/net/maildir/maildirStore.cpp b/src/net/maildir/maildirStore.cpp +index 3b77024..26f4593 100644 +--- a/src/net/maildir/maildirStore.cpp ++++ b/src/net/maildir/maildirStore.cpp +@@ -132,7 +132,7 @@ void maildirStore::connect() + throw exceptions::already_connected(); + + // Get root directory +- utility::fileSystemFactory* fsf = platform::getHandler()->getFileSystemFactory(); ++ ref fsf = platform::getHandler()->getFileSystemFactory(); + + m_fsPath = fsf->stringToPath(GET_PROPERTY(string, PROPERTY_SERVER_ROOTPATH)); + +diff --git a/src/platforms/posix/posixHandler.cpp b/src/platforms/posix/posixHandler.cpp +index f43972e..104bc40 100644 +--- a/src/platforms/posix/posixHandler.cpp ++++ b/src/platforms/posix/posixHandler.cpp +@@ -55,18 +55,14 @@ posixHandler::posixHandler() + m_socketFactory = vmime::create (); + #endif + #if VMIME_HAVE_FILESYSTEM_FEATURES +- m_fileSysFactory = new posixFileSystemFactory(); +- m_childProcFactory = new posixChildProcessFactory(); ++ m_fileSysFactory = vmime::create (); ++ m_childProcFactory = vmime::create (); + #endif + } + + + posixHandler::~posixHandler() + { +-#if VMIME_HAVE_FILESYSTEM_FEATURES +- delete (m_fileSysFactory); +- delete (m_childProcFactory); +-#endif + } + + +@@ -173,9 +169,9 @@ unsigned int posixHandler::getProcessId() const + + #if VMIME_HAVE_MESSAGING_FEATURES + +-ref posixHandler::getSocketFactory() const ++ref posixHandler::getSocketFactory() + { +- return m_socketFactory.dynamicCast (); ++ return m_socketFactory; + } + + #endif +@@ -183,15 +179,15 @@ ref posixHandler::getSocketFactory() const + + #if VMIME_HAVE_FILESYSTEM_FEATURES + +-vmime::utility::fileSystemFactory* posixHandler::getFileSystemFactory() const ++ref posixHandler::getFileSystemFactory() + { +- return (m_fileSysFactory); ++ return m_fileSysFactory; + } + + +-vmime::utility::childProcessFactory* posixHandler::getChildProcessFactory() const ++ref posixHandler::getChildProcessFactory() + { +- return (m_childProcFactory); ++ return m_childProcFactory; + } + + #endif +diff --git a/src/platforms/windows/windowsHandler.cpp b/src/platforms/windows/windowsHandler.cpp +index 404d3cb..1a37c83 100644 +--- a/src/platforms/windows/windowsHandler.cpp ++++ b/src/platforms/windows/windowsHandler.cpp +@@ -49,17 +49,13 @@ windowsHandler::windowsHandler() + m_socketFactory = vmime::create (); + #endif + #if VMIME_HAVE_FILESYSTEM_FEATURES +- m_fileSysFactory = new windowsFileSystemFactory(); ++ m_fileSysFactory = vmime::create (); + #endif + } + + + windowsHandler::~windowsHandler() + { +-#if VMIME_HAVE_FILESYSTEM_FEATURES +- delete (m_fileSysFactory); +-#endif +- + WSACleanup(); + } + +@@ -240,9 +236,9 @@ unsigned int windowsHandler::getProcessId() const + + #if VMIME_HAVE_MESSAGING_FEATURES + +-ref windowsHandler::getSocketFactory() const ++ref windowsHandler::getSocketFactory() + { +- return m_socketFactory.dynamicCast (); ++ return m_socketFactory; + } + + #endif +@@ -250,13 +246,13 @@ ref windowsHandler::getSocketFactory() const + + #if VMIME_HAVE_FILESYSTEM_FEATURES + +-vmime::utility::fileSystemFactory* windowsHandler::getFileSystemFactory() const ++ref windowsHandler::getFileSystemFactory() + { +- return (m_fileSysFactory); ++ return m_fileSysFactory; + } + + +-vmime::utility::childProcessFactory* windowsHandler::getChildProcessFactory() const ++ref windowsHandler::getChildProcessFactory() + { + // TODO: Not implemented + return (NULL); +diff --git a/tests/net/maildir/maildirStoreTest.cpp b/tests/net/maildir/maildirStoreTest.cpp +index 5f8c703..3b1980e 100644 +--- a/tests/net/maildir/maildirStoreTest.cpp ++++ b/tests/net/maildir/maildirStoreTest.cpp +@@ -501,7 +501,7 @@ private: + + const vmime::utility::url getStoreURL() + { +- vmime::utility::fileSystemFactory* fsf = ++ vmime::ref fsf = + vmime::platform::getHandler()->getFileSystemFactory(); + + vmime::utility::url url(std::string("maildir://localhost") +@@ -512,7 +512,7 @@ private: + + void createMaildir(const vmime::string* const dirs, const vmime::string* const files) + { +- vmime::utility::fileSystemFactory* fsf = ++ vmime::ref fsf = + vmime::platform::getHandler()->getFileSystemFactory(); + + vmime::ref rootDir = fsf->create(m_tempPath); +@@ -544,7 +544,7 @@ private: + + void destroyMaildir() + { +- vmime::utility::fileSystemFactory* fsf = ++ vmime::ref fsf = + vmime::platform::getHandler()->getFileSystemFactory(); + + recursiveDelete(fsf->create(m_tempPath)); +diff --git a/vmime/platform.hpp b/vmime/platform.hpp +index d390571..0281554 100644 +--- a/vmime/platform.hpp ++++ b/vmime/platform.hpp +@@ -108,7 +108,7 @@ public: + * + * @return socket factory + */ +- virtual ref getSocketFactory() const = 0; ++ virtual ref getSocketFactory() = 0; + #endif + + #if VMIME_HAVE_FILESYSTEM_FEATURES +@@ -116,14 +116,14 @@ public: + * + * @return file-system factory + */ +- virtual utility::fileSystemFactory* getFileSystemFactory() const = 0; ++ virtual ref getFileSystemFactory() = 0; + + /** Return a pointer to a factory that creates child process objects, + * which are used to spawn processes (run executable files). + * + * @return child process factory + */ +- virtual utility::childProcessFactory* getChildProcessFactory() const = 0; ++ virtual ref getChildProcessFactory() = 0; + #endif + + }; +@@ -135,7 +135,7 @@ public: + sm_handler = vmime::create (); + } + +- static ref getHandler() ++ static ref getHandler() + { + if (!sm_handler) + throw exceptions::no_platform_handler(); +diff --git a/vmime/platforms/posix/posixHandler.hpp b/vmime/platforms/posix/posixHandler.hpp +index 397a5dd..8e572a2 100644 +--- a/vmime/platforms/posix/posixHandler.hpp ++++ b/vmime/platforms/posix/posixHandler.hpp +@@ -61,13 +61,13 @@ public: + unsigned int getProcessId() const; + + #if VMIME_HAVE_MESSAGING_FEATURES +- ref getSocketFactory() const; ++ ref getSocketFactory(); + #endif + + #if VMIME_HAVE_FILESYSTEM_FEATURES +- vmime::utility::fileSystemFactory* getFileSystemFactory() const; ++ ref getFileSystemFactory(); + +- vmime::utility::childProcessFactory* getChildProcessFactory() const; ++ ref getChildProcessFactory(); + #endif + + void wait() const; +@@ -79,8 +79,8 @@ private: + #endif + + #if VMIME_HAVE_FILESYSTEM_FEATURES +- posixFileSystemFactory* m_fileSysFactory; +- posixChildProcessFactory* m_childProcFactory; ++ ref m_fileSysFactory; ++ ref m_childProcFactory; + #endif + }; + +diff --git a/vmime/platforms/windows/windowsHandler.hpp b/vmime/platforms/windows/windowsHandler.hpp +index 701edf0..53df363 100644 +--- a/vmime/platforms/windows/windowsHandler.hpp ++++ b/vmime/platforms/windows/windowsHandler.hpp +@@ -60,13 +60,13 @@ public: + unsigned int getProcessId() const; + + #if VMIME_HAVE_MESSAGING_FEATURES +- ref getSocketFactory() const; ++ ref getSocketFactory(); + #endif + + #if VMIME_HAVE_FILESYSTEM_FEATURES +- vmime::utility::fileSystemFactory* getFileSystemFactory() const; ++ ref getFileSystemFactory(); + +- vmime::utility::childProcessFactory* getChildProcessFactory() const; ++ ref getChildProcessFactory(); + #endif + + void wait() const; +@@ -78,7 +78,7 @@ private: + #endif + + #if VMIME_HAVE_FILESYSTEM_FEATURES +- windowsFileSystemFactory* m_fileSysFactory; ++ ref m_fileSysFactory; + #endif + }; + +diff --git a/vmime/utility/childProcess.hpp b/vmime/utility/childProcess.hpp +index 33cb633..b5405f7 100644 +--- a/vmime/utility/childProcess.hpp ++++ b/vmime/utility/childProcess.hpp +@@ -85,7 +85,7 @@ public: + /** Create 'childProcess' objects. + */ + +-class childProcessFactory ++class childProcessFactory : public object + { + public: + +diff --git a/vmime/utility/file.hpp b/vmime/utility/file.hpp +index 61ede80..f1d877e 100644 +--- a/vmime/utility/file.hpp ++++ b/vmime/utility/file.hpp +@@ -214,7 +214,7 @@ private: + /** Constructs 'file' objects. + */ + +-class fileSystemFactory ++class fileSystemFactory : public object + { + public: + + +commit e2f7eb2eef7de7fd926e1d80e2a108869a839ec4 +Author: vincent-richard +Date: Tue Dec 8 10:21:33 2009 +0000 + + Fixed non thread-safe getLocalCharset() function (thanks to Bartek Szurgot). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@518 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixHandler.cpp b/src/platforms/posix/posixHandler.cpp +index 104bc40..2c11307 100644 +--- a/src/platforms/posix/posixHandler.cpp ++++ b/src/platforms/posix/posixHandler.cpp +@@ -36,6 +36,11 @@ + #include + + #include ++#include ++ ++#if VMIME_HAVE_PTHREAD ++# include ++#endif // VMIME_HAVE_PTHREAD + + /* + #ifdef _POSIX_PRIORITY_SCHEDULING +@@ -44,6 +49,43 @@ + */ + + ++#if VMIME_HAVE_PTHREAD ++ ++namespace ++{ ++ // This construction ensures mutex will be initialized in compile-time ++ // and will be available any time in the runtime. ++ pthread_mutex_t g_mutex = PTHREAD_MUTEX_INITIALIZER; ++ ++ // Helper lock, to be exception safe all the time. ++ class PLockHelper ++ { ++ public: ++ ++ PLockHelper() ++ { ++ if (pthread_mutex_lock(&g_mutex) != 0) ++ assert(!"unable to lock mutex - thread safety's void"); ++ } ++ ++ ~PLockHelper() ++ { ++ if (pthread_mutex_unlock(&g_mutex) != 0) ++ assert(!"unable to unlock mutex - application's dead..."); ++ } ++ ++ private: ++ ++ // Object cannot be copied ++ PLockHelper(const PLockHelper&); ++ const PLockHelper& operator=(const PLockHelper&); ++ }; ++ ++} // unnamed namespace ++ ++#endif // VMIME_HAVE_PTHREAD ++ ++ + namespace vmime { + namespace platforms { + namespace posix { +@@ -109,6 +151,8 @@ const vmime::datetime posixHandler::getCurrentLocalTime() const + + const vmime::charset posixHandler::getLocaleCharset() const + { ++ const PLockHelper lock; ++ + const char* prevLocale = ::setlocale(LC_ALL, ""); + vmime::charset ch(::nl_langinfo(CODESET)); + ::setlocale(LC_ALL, prevLocale); + +commit d2f72cddc908788a539810ff428dbcc123be1dd3 +Author: vincent-richard +Date: Sun Dec 13 12:50:36 2009 +0000 + + Makes 'To' optional, like 'Cc' and 'Bcc'. An exception is still thrown if there are no recipients at all (see bug #2912670). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@519 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/messageBuilder.cpp b/src/messageBuilder.cpp +index a70372f..870d59e 100644 +--- a/src/messageBuilder.cpp ++++ b/src/messageBuilder.cpp +@@ -54,11 +54,17 @@ ref messageBuilder::construct() const + if (m_from.isEmpty()) + throw exceptions::no_expeditor(); + +- if (m_to.isEmpty() || m_to.getAddressAt(0)->isEmpty()) ++ if ((m_to.isEmpty() || m_to.getAddressAt(0)->isEmpty()) && ++ (m_cc.isEmpty() || m_cc.getAddressAt(0)->isEmpty()) && ++ (m_bcc.isEmpty() || m_bcc.getAddressAt(0)->isEmpty())) ++ { + throw exceptions::no_recipient(); ++ } + + msg->getHeader()->From()->setValue(m_from); +- msg->getHeader()->To()->setValue(m_to); ++ ++ if (!m_to.isEmpty()) ++ msg->getHeader()->To()->setValue(m_to); + + if (!m_cc.isEmpty()) + msg->getHeader()->Cc()->setValue(m_cc); + +commit eefa93eba21736bf9689317c35b0fd9ea6c30e69 +Author: vincent-richard +Date: Wed Jan 20 08:42:47 2010 +0000 + + Fixed bug #2933667: CRLF filter broken. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@520 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/utility/filteredStream.cpp b/src/utility/filteredStream.cpp +index 619f9da..c1b01ef 100644 +--- a/src/utility/filteredStream.cpp ++++ b/src/utility/filteredStream.cpp +@@ -231,8 +231,8 @@ void CRLFToLFFilteredOutputStream::write + + if (previousChar == '\r') + { +- if (pos != data) +- m_stream.write(start, pos - 1 - data); // do not write \r ++ if (pos != start) ++ m_stream.write(start, pos - 1 - start); // do not write \r + + m_stream.write("\n", 1); + +diff --git a/tests/utility/filteredStreamTest.cpp b/tests/utility/filteredStreamTest.cpp +index ad26e6c..a2e6f3e 100644 +--- a/tests/utility/filteredStreamTest.cpp ++++ b/tests/utility/filteredStreamTest.cpp +@@ -175,6 +175,7 @@ VMIME_TEST_SUITE_BEGIN + testFilteredOutputStreamHelper("4", "foo\nbar", "foo", "\r\nbar"); + testFilteredOutputStreamHelper("5", "foo\nbar", "foo", "\r", "\nbar"); + testFilteredOutputStreamHelper("6", "foo\nbar", "foo", "\r", "\n", "bar"); ++ testFilteredOutputStreamHelper("7", "foo\nba\nr", "foo\r", "\nba\r\nr"); + } + + // stopSequenceFilteredInputStream + +commit 85ad52fef45592a0c3335afc3564b3485db07657 +Author: vincent-richard +Date: Mon Feb 1 13:06:06 2010 +0000 + + Fixed bug #2927077: account for multi-byte charsets in invalid sequence output. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@521 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/charsetConverter.cpp b/src/charsetConverter.cpp +index ec74ae5..798adf0 100644 +--- a/src/charsetConverter.cpp ++++ b/src/charsetConverter.cpp +@@ -121,7 +121,18 @@ void charsetConverter::convert(utility::inputStream& in, utility::outputStream& + + // Output a special character to indicate we don't known how to + // convert the sequence at this position +- out.write("?", 1); ++ const char* invalidCharIn = "?"; ++ size_t invalidCharInLen = 1; ++ ++ char invalidCharOutBuffer[16]; ++ char* invalidCharOutPtr = invalidCharOutBuffer; ++ size_t invalidCharOutLen = 16; ++ ++ if (iconv(cd, ICONV_HACK(&invalidCharIn), &invalidCharInLen, ++ &invalidCharOutPtr, &invalidCharOutLen) != static_cast (-1)) ++ { ++ out.write(invalidCharOutBuffer, 16 - invalidCharOutLen); ++ } + + // Skip a byte and leave unconverted bytes in the input buffer + std::copy(const_cast (inPtr + 1), inBuffer + sizeof(inBuffer), inBuffer); + +commit 99869c3d4c41304034667400ac6a5c3edc07146d +Author: vincent-richard +Date: Mon Feb 1 13:26:12 2010 +0000 + + Fixed bug #2927077: account for multi-byte charsets in invalid sequence output. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@522 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/charsetConverter.cpp b/src/charsetConverter.cpp +index 798adf0..38b9e5e 100644 +--- a/src/charsetConverter.cpp ++++ b/src/charsetConverter.cpp +@@ -53,6 +53,27 @@ extern "C" + } + + ++ ++// Output replacement char when an invalid sequence is encountered ++template ++void outputInvalidChar(OUTPUT_CLASS& out, ICONV_DESC cd) ++{ ++ const char* invalidCharIn = "?"; ++ size_t invalidCharInLen = 1; ++ ++ char invalidCharOutBuffer[16]; ++ char* invalidCharOutPtr = invalidCharOutBuffer; ++ size_t invalidCharOutLen = 16; ++ ++ if (iconv(cd, ICONV_HACK(&invalidCharIn), &invalidCharInLen, ++ &invalidCharOutPtr, &invalidCharOutLen) != static_cast (-1)) ++ { ++ out.write(invalidCharOutBuffer, 16 - invalidCharOutLen); ++ } ++} ++ ++ ++ + namespace vmime + { + +@@ -121,18 +142,7 @@ void charsetConverter::convert(utility::inputStream& in, utility::outputStream& + + // Output a special character to indicate we don't known how to + // convert the sequence at this position +- const char* invalidCharIn = "?"; +- size_t invalidCharInLen = 1; +- +- char invalidCharOutBuffer[16]; +- char* invalidCharOutPtr = invalidCharOutBuffer; +- size_t invalidCharOutLen = 16; +- +- if (iconv(cd, ICONV_HACK(&invalidCharIn), &invalidCharInLen, +- &invalidCharOutPtr, &invalidCharOutLen) != static_cast (-1)) +- { +- out.write(invalidCharOutBuffer, 16 - invalidCharOutLen); +- } ++ outputInvalidChar(out, cd); + + // Skip a byte and leave unconverted bytes in the input buffer + std::copy(const_cast (inPtr + 1), inBuffer + sizeof(inBuffer), inBuffer); +@@ -246,7 +256,7 @@ void charsetFilteredOutputStream::write + // character and skip one byte in the invalid sequence. + if (m_unconvCount >= sizeof(m_unconvBuffer)) + { +- m_stream.write("?", 1); ++ outputInvalidChar(m_stream, cd); + + std::copy(m_unconvBuffer + 1, + m_unconvBuffer + m_unconvCount, m_unconvBuffer); +@@ -369,7 +379,7 @@ void charsetFilteredOutputStream::flush() + // Skip a "blocking" character + if (inputConverted == 0) + { +- m_stream.write("?", 1); ++ outputInvalidChar(m_stream, cd); + + offset++; + m_unconvCount--; + +commit fb9a3f5572922a285284af7b88bea90e69897345 +Author: vincent-richard +Date: Mon Feb 1 16:33:31 2010 +0000 + + Fixed memory leak. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@523 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/maildir/maildirFormat.cpp b/src/net/maildir/maildirFormat.cpp +index 607ed61..7844542 100644 +--- a/src/net/maildir/maildirFormat.cpp ++++ b/src/net/maildir/maildirFormat.cpp +@@ -52,7 +52,7 @@ maildirFormat::context::context(ref store) + + ref maildirFormat::context::getStore() const + { +- return m_store; ++ return m_store.acquire().constCast (); + } + + +diff --git a/vmime/net/maildir/maildirFormat.hpp b/vmime/net/maildir/maildirFormat.hpp +index a47c854..0940696 100644 +--- a/vmime/net/maildir/maildirFormat.hpp ++++ b/vmime/net/maildir/maildirFormat.hpp +@@ -55,7 +55,7 @@ public: + + private: + +- ref m_store; ++ weak_ref m_store; + }; + + + +commit 66bd70eb441da32d95ec103ebc26c9b53d90d28e +Author: vincent-richard +Date: Wed Feb 3 10:45:17 2010 +0000 + + Removed wide-char support. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@524 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 89b58f6..33bc2a3 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -530,14 +530,6 @@ opts.AddOptions( + defaultSendmailPath + ), + EnumOption( +- 'with_wide_char_support', +- 'Support for wide characters (rarely used, should be set to "no")', +- 'no', +- allowed_values = ('yes', 'no'), +- map = { }, +- ignorecase = 1 +- ), +- EnumOption( + 'byte_order', + 'Byte order (Big Endian or Little Endian)', + sys.byteorder, +@@ -802,12 +794,6 @@ config_hpp.write('\n') + + config_hpp.write('// Options\n') + +-config_hpp.write('// -- Wide characters support\n') +-if env['with_wide_char_support'] == 'yes': +- config_hpp.write('#define VMIME_WIDE_CHAR_SUPPORT 1\n') +-else: +- config_hpp.write('#define VMIME_WIDE_CHAR_SUPPORT 0\n') +- + config_hpp.write('// -- File-system support\n') + if env['with_filesystem'] == 'yes': + config_hpp.write('#define VMIME_HAVE_FILESYSTEM_FEATURES 1\n') +@@ -1916,8 +1902,6 @@ typedef signed ${VMIME_TYPE_INT32} vmime_int32; + typedef unsigned ${VMIME_TYPE_INT32} vmime_uint32; + + // Options +-// -- Wide characters support +-#define VMIME_WIDE_CHAR_SUPPORT 0 + // -- File-system support + #define VMIME_HAVE_FILESYSTEM_FEATURES 1 + // -- SASL support +@@ -2261,8 +2245,6 @@ typedef unsigned int vmime_uint32; + + + // Options +-// -- Wide characters support +-#define VMIME_WIDE_CHAR_SUPPORT 0 + // -- File-system support + #define VMIME_HAVE_FILESYSTEM_FEATURES 1 + // -- SASL support +diff --git a/src/base.cpp b/src/base.cpp +index 2e47ca3..b895985 100644 +--- a/src/base.cpp ++++ b/src/base.cpp +@@ -55,12 +55,6 @@ namespace vmime + */ + const string NULL_STRING; + +-#if VMIME_WIDE_CHAR_SUPPORT +- /** "Null" (empty) wide-char string. +- */ +- const wstring NULL_WSTRING; +-#endif +- + /** "Null" (empty) text. + */ + const text NULL_TEXT; +diff --git a/src/text.cpp b/src/text.cpp +index f9ded7c..89a541a 100644 +--- a/src/text.cpp ++++ b/src/text.cpp +@@ -91,21 +91,6 @@ void text::generate(utility::outputStream& os, const string::size_type maxLineLe + } + + +-#if VMIME_WIDE_CHAR_SUPPORT +- +-const wstring text::getDecodedText() const +-{ +- wstring out; +- +- for (std::vector >::const_iterator i = m_words.begin() ; i != m_words.end() ; ++i) +- out += (*i)->getDecodedText(); +- +- return (out); +-} +- +-#endif +- +- + void text::copyFrom(const component& other) + { + const text& t = dynamic_cast (other); +diff --git a/src/word.cpp b/src/word.cpp +index ea8244a..4f91108 100644 +--- a/src/word.cpp ++++ b/src/word.cpp +@@ -621,20 +621,6 @@ void word::generate(utility::outputStream& os, const string::size_type maxLineLe + } + + +-#if VMIME_WIDE_CHAR_SUPPORT +- +-const wstring word::getDecodedText() const +-{ +- wstring out; +- +- charset::decode(m_buffer, out, m_charset); +- +- return (out); +-} +- +-#endif +- +- + word& word::operator=(const word& w) + { + m_buffer = w.m_buffer; +diff --git a/vmime/base.hpp b/vmime/base.hpp +index ce544e1..60e637d 100644 +--- a/vmime/base.hpp ++++ b/vmime/base.hpp +@@ -48,9 +48,6 @@ namespace vmime + + // "Null" strings + extern const string NULL_STRING; +-#if VMIME_WIDE_CHAR_SUPPORT +- extern const wstring NULL_WSTRING; +-#endif + + extern const text NULL_TEXT; + extern const word NULL_WORD; +diff --git a/vmime/text.hpp b/vmime/text.hpp +index 9760c48..15e11ae 100644 +--- a/vmime/text.hpp ++++ b/vmime/text.hpp +@@ -129,10 +129,6 @@ public: + */ + const std::vector > getWordList(); + +- // Decoding +-#if VMIME_WIDE_CHAR_SUPPORT +- const wstring getDecodedText() const; +-#endif + + /** Return the text converted into the specified charset. + * The encoded-words are decoded and then converted in the +diff --git a/vmime/types.hpp b/vmime/types.hpp +index bdf627e..d1137e1 100644 +--- a/vmime/types.hpp ++++ b/vmime/types.hpp +@@ -36,9 +36,6 @@ + namespace vmime + { + typedef std::string string; +-#if VMIME_WIDE_CHAR_SUPPORT +- typedef std::wstring wstring; +-#endif + + typedef unsigned short port_t; + +diff --git a/vmime/word.hpp b/vmime/word.hpp +index 78a88e8..ad848ec 100644 +--- a/vmime/word.hpp ++++ b/vmime/word.hpp +@@ -91,10 +91,6 @@ public: + bool operator==(const word& w) const; + bool operator!=(const word& w) const; + +-#if VMIME_WIDE_CHAR_SUPPORT +- const wstring getDecodedText() const; +-#endif +- + /** Return the contained text converted to the specified charset. + * + * @param dest output charset + +commit 221ae58cc1587a78a221988398f9377417b17e25 +Author: vincent-richard +Date: Wed Feb 3 10:56:12 2010 +0000 + + Use homemade isSpace() instead of std::ispace() for portability. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@525 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/word.cpp b/src/word.cpp +index 4f91108..f24d631 100644 +--- a/src/word.cpp ++++ b/src/word.cpp +@@ -475,7 +475,7 @@ void word::generate(utility::outputStream& os, const string::size_type maxLineLe + + os << string(curLineStart, lastWSpos); + +- if (lastWSpos > curLineStart && std::isspace(*(lastWSpos - 1))) ++ if (lastWSpos > curLineStart && parserHelpers::isSpace(*(lastWSpos - 1))) + state->lastCharIsSpace = true; + else + state->lastCharIsSpace = false; + +commit af61f3bcc07eabd7cad06e9619882ce239cb419f +Author: vincent-richard +Date: Wed Feb 3 11:01:40 2010 +0000 + + Fixed compilation issue on Windows. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@526 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/windows/windowsFile.cpp b/src/platforms/windows/windowsFile.cpp +index 82c5696..624612a 100644 +--- a/src/platforms/windows/windowsFile.cpp ++++ b/src/platforms/windows/windowsFile.cpp +@@ -268,7 +268,7 @@ bool windowsFile::canWrite() const + return true; + } + +-const windowsFile::length_type windowsFile::getLength() ++windowsFile::length_type windowsFile::getLength() + { + HANDLE hFile = CreateFile( + m_nativePath.c_str(), + +commit bc1016c7e1f18c1088809a2104b295563a2d253a +Author: vincent-richard +Date: Wed Feb 10 09:12:25 2010 +0000 + + Allow spaces to appear in mailbox display name without encoding or quoting. Encode or quote if CR or LF is present. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@527 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/mailbox.cpp b/src/mailbox.cpp +index f6df516..036f003 100644 +--- a/src/mailbox.cpp ++++ b/src/mailbox.cpp +@@ -369,7 +369,7 @@ void mailbox::generate(utility::outputStream& os, const string::size_type maxLin + // We have to encode the name: + // - if it contains characters in a charset different from "US-ASCII", + // - and/or if it contains one or more of these special chars: +- // SPACE TAB " ; , < > ( ) @ / ? . = : ++ // CR LF TAB " ; , < > ( ) @ / ? . = : + + // Check whether there are words that are not "US-ASCII" + // and/or contain the special chars. +@@ -386,7 +386,8 @@ void mailbox::generate(utility::outputStream& os, const string::size_type maxLin + { + switch (*c) + { +- case ' ': ++ case '\r': ++ case '\n': + case '\t': + case ';': + case ',': + +commit 65d0cd058e4806b1a783656e3239403edd628f5b +Author: vincent-richard +Date: Wed Feb 10 09:41:36 2010 +0000 + + Don't quote if no encoding is needed. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@528 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/word.cpp b/src/word.cpp +index f24d631..667f1fb 100644 +--- a/src/word.cpp ++++ b/src/word.cpp +@@ -357,7 +357,8 @@ void word::generate(utility::outputStream& os, const string::size_type maxLineLe + // - the whole buffer is ASCII-only + // - the buffer does not contain quoting character (") + // - there is enough remaining space on the current line to hold the whole buffer +- if ((flags & text::QUOTE_IF_POSSIBLE) && ++ if (!noEncoding && ++ (flags & text::QUOTE_IF_POSSIBLE) && + asciiCount == m_buffer.length() && + m_buffer.find('"') == string::npos && + (curLineLength + 2 /* 2 x " */ + m_buffer.length()) < maxLineLength) + +commit 5b770cf6cb94b90e72360314e31ea05ca8dfe396 +Author: vincent-richard +Date: Wed Feb 10 10:39:10 2010 +0000 + + Fixed missing M4 file in dist tarball. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@529 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 33bc2a3..f6dc257 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -376,6 +376,7 @@ libvmimetest_sources = [ + ] + + libvmime_autotools = [ ++ 'm4/acx_pthread.m4', + 'm4/iconv.m4', + 'm4/lib-ld.m4', + 'm4/lib-link.m4', + +commit ce3c3fffbdf366e9c6afc4216485f0f9e0ce13a2 +Author: vincent-richard +Date: Fri Feb 12 22:00:49 2010 +0000 + + Replaced 'Options' with 'Variables' to solve warnings about the former being deprecated. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@530 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index f6dc257..d45aec0 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -459,15 +459,15 @@ if defaultSendmailPath == None: + + + # Command line options +-opts = Options('options.cache') ++opts = Variables('options.cache') + +-opts.AddOptions( ++opts.AddVariables( + ( + 'prefix', + 'Installation prefix directory', + '/usr' + ), +- EnumOption( ++ EnumVariable( + 'debug', + 'Debug version (useful for developers only)', + 'no', +@@ -475,7 +475,7 @@ opts.AddOptions( + map = { }, + ignorecase = 1 + ), +- EnumOption( ++ EnumVariable( + 'with_messaging', + 'Messaging support (connection to mail store/transport servers)', + 'yes', +@@ -483,7 +483,7 @@ opts.AddOptions( + map = { }, + ignorecase = 1 + ), +- EnumOption( ++ EnumVariable( + 'with_filesystem', + 'Enable file-system support (this is needed for "maildir" messaging support)', + 'yes', +@@ -509,7 +509,7 @@ opts.AddOptions( + + 'Currently available platform handlers: posix.', + '"posix"' + ), +- EnumOption( ++ EnumVariable( + 'with_sasl', + 'Enable SASL support (requires GNU SASL library)', + 'yes', +@@ -517,7 +517,7 @@ opts.AddOptions( + map = { }, + ignorecase = 1 + ), +- EnumOption( ++ EnumVariable( + 'with_tls', + 'Enable TLS support (requires GNU TLS library)', + 'yes', +@@ -530,7 +530,7 @@ opts.AddOptions( + 'Specifies the path to sendmail.', + defaultSendmailPath + ), +- EnumOption( ++ EnumVariable( + 'byte_order', + 'Byte order (Big Endian or Little Endian)', + sys.byteorder, +@@ -538,7 +538,7 @@ opts.AddOptions( + map = { }, + ignorecase = 1 + ), +- EnumOption( ++ EnumVariable( + 'pf_8bit_type', + 'The C-language 8-bit type for your platform', + 'char', +@@ -546,7 +546,7 @@ opts.AddOptions( + map = { }, + ignorecase = 1 + ), +- EnumOption( ++ EnumVariable( + 'pf_16bit_type', + 'The C-language 16-bit type for your platform', + 'short', +@@ -554,7 +554,7 @@ opts.AddOptions( + map = { }, + ignorecase = 1 + ), +- EnumOption( ++ EnumVariable( + 'pf_32bit_type', + 'The C-language 32-bit type for your platform', + 'int', +@@ -562,7 +562,7 @@ opts.AddOptions( + map = { }, + ignorecase = 1 + ), +- EnumOption( ++ EnumVariable( + 'build_tests', + 'Build unit tests (run with "scons run-tests")', + 'no', + +commit 6dcc7213c7881e312fcbc68742f33c38a425fe7e +Author: vincent-richard +Date: Fri Feb 12 22:11:03 2010 +0000 + + Solved 'underquoted' warnings from m4 macros. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@531 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/m4/ost_posix.m4 b/m4/ost_posix.m4 +index 6572b1e..ab05e25 100644 +--- a/m4/ost_posix.m4 ++++ b/m4/ost_posix.m4 +@@ -19,7 +19,7 @@ dnl distribute this file as part of a program that contains a configuration + dnl script generated by Autoconf, you may include it under the same + dnl distribution terms that you use for the rest of that program. + +-AC_DEFUN(OST_SYS_POSIX,[ ++AC_DEFUN([OST_SYS_POSIX],[ + AC_REQUIRE([OST_PROG_CC_POSIX]) + AC_CACHE_CHECK(whether system meets Posix.1, + ost_cv_sys_posix1, +@@ -65,7 +65,7 @@ AC_DEFUN(OST_SYS_POSIX,[ + ]) + ]) + +-AC_DEFUN(OST_CC_FCNTL,[ ++AC_DEFUN([OST_CC_FCNTL],[ + AC_REQUIRE([OST_SYS_POSIX]) + AC_CHECK_HEADERS(fcntl.h sys/fcntl.h) + AH_BOTTOM([ +diff --git a/m4/ost_prog.m4 b/m4/ost_prog.m4 +index c9e66f5..aaa82f3 100644 +--- a/m4/ost_prog.m4 ++++ b/m4/ost_prog.m4 +@@ -19,18 +19,18 @@ dnl distribute this file as part of a program that contains a configuration + dnl script generated by Autoconf, you may include it under the same + dnl distribution terms that you use for the rest of that program. + +-AC_DEFUN(OST_PROG_CC_POSIX,[ ++AC_DEFUN([OST_PROG_CC_POSIX],[ + AC_PROG_CC + AC_PROG_CPP + AC_ISC_POSIX] + ) + +-AC_DEFUN(OST_PROG_COMMON,[ ++AC_DEFUN([OST_PROG_COMMON],[ + AC_REQUIRE([AC_PROG_INSTALL]) + AC_REQUIRE([AC_PROG_MAKE_SET]) + ]) + +-AC_DEFUN(OST_PROJ_LIBRARY,[ ++AC_DEFUN([OST_PROJ_LIBRARY],[ + AC_REQUIRE([AM_PROG_LIBTOOL]) + AC_REQUIRE([AC_PROG_RANLIB]) + if test ! -z "[$2]" ; then +@@ -43,14 +43,14 @@ AC_DEFUN(OST_PROJ_LIBRARY,[ + fi + ]) + +-AC_DEFUN(OST_PROG_LIBVER,[ ++AC_DEFUN([OST_PROG_LIBVER],[ + LT_MAJOR="`echo $LT_VERSION | sed s/:.*$//`" + AC_SUBST(LT_RELEASE) + AC_SUBST(LT_MAJOR) + ]) + + +-AC_DEFUN(OST_PROG_LIBRARY,[ ++AC_DEFUN([OST_PROG_LIBRARY],[ + AC_REQUIRE([AM_PROG_LIBTOOL]) + AC_REQUIRE([AC_PROG_RANLIB]) + if test ! -z "[$2]" ; then +diff --git a/m4/ost_systime.m4 b/m4/ost_systime.m4 +index f48f207..145611e 100644 +--- a/m4/ost_systime.m4 ++++ b/m4/ost_systime.m4 +@@ -19,7 +19,7 @@ dnl distribute this file as part of a program that contains a configuration + dnl script generated by Autoconf, you may include it under the same + dnl distribution terms that you use for the rest of that program. + +-AC_DEFUN(OST_CC_SYSTIME,[ ++AC_DEFUN([OST_CC_SYSTIME],[ + AC_HEADER_TIME + AC_CHECK_HEADERS(sys/time.h) + AH_TOP([ + +commit 0af45816e99b3d8e7a9902a35330095408c487ae +Author: vincent-richard +Date: Fri Feb 12 22:28:37 2010 +0000 + + Updated gettext m4 macros to 0.17. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@532 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/m4/lib-link.m4 b/m4/lib-link.m4 +index ea0b0c4..e3d26fc 100644 +--- a/m4/lib-link.m4 ++++ b/m4/lib-link.m4 +@@ -1,17 +1,19 @@ +-# lib-link.m4 serial 6 (gettext-0.14.3) +-dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. ++# lib-link.m4 serial 13 (gettext-0.17) ++dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, + dnl with or without modifications, as long as this notice is preserved. + + dnl From Bruno Haible. + +-AC_PREREQ(2.50) ++AC_PREREQ(2.54) + + dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and + dnl the libraries corresponding to explicit and implicit dependencies. + dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and + dnl augments the CPPFLAGS variable. ++dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname ++dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. + AC_DEFUN([AC_LIB_LINKFLAGS], + [ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) +@@ -24,13 +26,16 @@ AC_DEFUN([AC_LIB_LINKFLAGS], + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ++ ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" ++ LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) ++ AC_SUBST([LIB]NAME[_PREFIX]) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes +@@ -46,6 +51,8 @@ dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and + dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and + dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs + dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. ++dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname ++dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. + AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], + [ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) +@@ -82,17 +89,23 @@ AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= ++ LIB[]NAME[]_PREFIX= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) ++ AC_SUBST([LIB]NAME[_PREFIX]) + undefine([Name]) + undefine([NAME]) + ]) + + dnl Determine the platform dependent parameters needed to use rpath: +-dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +-dnl hardcode_direct, hardcode_minus_L. ++dnl acl_libext, ++dnl acl_shlibext, ++dnl acl_hardcode_libdir_flag_spec, ++dnl acl_hardcode_libdir_separator, ++dnl acl_hardcode_direct, ++dnl acl_hardcode_minus_L. + AC_DEFUN([AC_LIB_RPATH], + [ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. +@@ -109,12 +122,14 @@ AC_DEFUN([AC_LIB_RPATH], + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" +- libext="$acl_cv_libext" +- shlibext="$acl_cv_shlibext" +- hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" +- hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" +- hardcode_direct="$acl_cv_hardcode_direct" +- hardcode_minus_L="$acl_cv_hardcode_minus_L" ++ acl_libext="$acl_cv_libext" ++ acl_shlibext="$acl_cv_shlibext" ++ acl_libname_spec="$acl_cv_libname_spec" ++ acl_library_names_spec="$acl_cv_library_names_spec" ++ acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" ++ acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" ++ acl_hardcode_direct="$acl_cv_hardcode_direct" ++ acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], +@@ -124,19 +139,24 @@ AC_DEFUN([AC_LIB_RPATH], + dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and + dnl the libraries corresponding to explicit and implicit dependencies. + dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. ++dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found ++dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. + AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + [ ++ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) ++ dnl Autoconf >= 2.61 supports dots in --with options. ++ define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) +- AC_LIB_ARG_WITH([lib$1-prefix], +-[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib +- --without-lib$1-prefix don't search for lib$1 in includedir and libdir], ++ AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix], ++[ --with-lib]N_A_M_E[-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib ++ --without-lib]N_A_M_E[-prefix don't search for lib$1 in includedir and libdir], + [ + if test "X$withval" = "Xno"; then + use_additional=no +@@ -148,7 +168,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + ]) + else + additional_includedir="$withval/include" +- additional_libdir="$withval/lib" ++ additional_libdir="$withval/$acl_libdirstem" + fi + fi + ]) +@@ -157,6 +177,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= ++ LIB[]NAME[]_PREFIX= + rpathdirs= + ltrpathdirs= + names_already_handled= +@@ -196,22 +217,55 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + found_la= + found_so= + found_a= ++ eval libname=\"$acl_libname_spec\" # typically: libname=lib$name ++ if test -n "$acl_shlibext"; then ++ shrext=".$acl_shlibext" # typically: shrext=.so ++ else ++ shrext= ++ fi + if test $use_additional = yes; then +- if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then +- found_dir="$additional_libdir" +- found_so="$additional_libdir/lib$name.$shlibext" +- if test -f "$additional_libdir/lib$name.la"; then +- found_la="$additional_libdir/lib$name.la" +- fi +- else +- if test -f "$additional_libdir/lib$name.$libext"; then +- found_dir="$additional_libdir" +- found_a="$additional_libdir/lib$name.$libext" +- if test -f "$additional_libdir/lib$name.la"; then +- found_la="$additional_libdir/lib$name.la" ++ dir="$additional_libdir" ++ dnl The same code as in the loop below: ++ dnl First look for a shared library. ++ if test -n "$acl_shlibext"; then ++ if test -f "$dir/$libname$shrext"; then ++ found_dir="$dir" ++ found_so="$dir/$libname$shrext" ++ else ++ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ++ ver=`(cd "$dir" && \ ++ for f in "$libname$shrext".*; do echo "$f"; done \ ++ | sed -e "s,^$libname$shrext\\\\.,," \ ++ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ ++ | sed 1q ) 2>/dev/null` ++ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then ++ found_dir="$dir" ++ found_so="$dir/$libname$shrext.$ver" ++ fi ++ else ++ eval library_names=\"$acl_library_names_spec\" ++ for f in $library_names; do ++ if test -f "$dir/$f"; then ++ found_dir="$dir" ++ found_so="$dir/$f" ++ break ++ fi ++ done + fi + fi + fi ++ dnl Then look for a static library. ++ if test "X$found_dir" = "X"; then ++ if test -f "$dir/$libname.$acl_libext"; then ++ found_dir="$dir" ++ found_a="$dir/$libname.$acl_libext" ++ fi ++ fi ++ if test "X$found_dir" != "X"; then ++ if test -f "$dir/$libname.la"; then ++ found_la="$dir/$libname.la" ++ fi ++ fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do +@@ -219,21 +273,46 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` +- if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then +- found_dir="$dir" +- found_so="$dir/lib$name.$shlibext" +- if test -f "$dir/lib$name.la"; then +- found_la="$dir/lib$name.la" +- fi +- else +- if test -f "$dir/lib$name.$libext"; then ++ dnl First look for a shared library. ++ if test -n "$acl_shlibext"; then ++ if test -f "$dir/$libname$shrext"; then + found_dir="$dir" +- found_a="$dir/lib$name.$libext" +- if test -f "$dir/lib$name.la"; then +- found_la="$dir/lib$name.la" ++ found_so="$dir/$libname$shrext" ++ else ++ if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ++ ver=`(cd "$dir" && \ ++ for f in "$libname$shrext".*; do echo "$f"; done \ ++ | sed -e "s,^$libname$shrext\\\\.,," \ ++ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ ++ | sed 1q ) 2>/dev/null` ++ if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then ++ found_dir="$dir" ++ found_so="$dir/$libname$shrext.$ver" ++ fi ++ else ++ eval library_names=\"$acl_library_names_spec\" ++ for f in $library_names; do ++ if test -f "$dir/$f"; then ++ found_dir="$dir" ++ found_so="$dir/$f" ++ break ++ fi ++ done + fi + fi + fi ++ dnl Then look for a static library. ++ if test "X$found_dir" = "X"; then ++ if test -f "$dir/$libname.$acl_libext"; then ++ found_dir="$dir" ++ found_a="$dir/$libname.$acl_libext" ++ fi ++ fi ++ if test "X$found_dir" != "X"; then ++ if test -f "$dir/$libname.la"; then ++ found_la="$dir/$libname.la" ++ fi ++ fi + ;; + esac + if test "X$found_dir" != "X"; then +@@ -248,7 +327,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. +- if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then ++ if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else +@@ -267,12 +346,12 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. +- if test "$hardcode_direct" = yes; then ++ if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else +- if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then ++ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" +@@ -303,13 +382,13 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi +- if test "$hardcode_minus_L" != no; then ++ if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else +- dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH ++ dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. +@@ -334,8 +413,9 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in +- */lib | */lib/) +- basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` ++ */$acl_libdirstem | */$acl_libdirstem/) ++ basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` ++ LIB[]NAME[]_PREFIX="$basedir" + additional_includedir="$basedir/include" + ;; + esac +@@ -396,9 +476,9 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. +- if test "X$additional_libdir" != "X/usr/lib"; then ++ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= +- if test "X$additional_libdir" = "X/usr/local/lib"; then ++ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; +@@ -497,18 +577,18 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + done + done + if test "X$rpathdirs" != "X"; then +- if test -n "$hardcode_libdir_separator"; then ++ if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do +- alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" ++ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done +- dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. ++ dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" +- eval flag=\"$hardcode_libdir_flag_spec\" ++ eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else +@@ -516,7 +596,7 @@ AC_DEFUN([AC_LIB_LINKFLAGS_BODY], + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" +- eval flag=\"$hardcode_libdir_flag_spec\" ++ eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done +@@ -551,3 +631,79 @@ AC_DEFUN([AC_LIB_APPENDTOVAR], + fi + done + ]) ++ ++dnl For those cases where a variable contains several -L and -l options ++dnl referring to unknown libraries and directories, this macro determines the ++dnl necessary additional linker options for the runtime path. ++dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) ++dnl sets LDADDVAR to linker options needed together with LIBSVALUE. ++dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, ++dnl otherwise linking without libtool is assumed. ++AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], ++[ ++ AC_REQUIRE([AC_LIB_RPATH]) ++ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) ++ $1= ++ if test "$enable_rpath" != no; then ++ if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then ++ dnl Use an explicit option to hardcode directories into the resulting ++ dnl binary. ++ rpathdirs= ++ next= ++ for opt in $2; do ++ if test -n "$next"; then ++ dir="$next" ++ dnl No need to hardcode the standard /usr/lib. ++ if test "X$dir" != "X/usr/$acl_libdirstem"; then ++ rpathdirs="$rpathdirs $dir" ++ fi ++ next= ++ else ++ case $opt in ++ -L) next=yes ;; ++ -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` ++ dnl No need to hardcode the standard /usr/lib. ++ if test "X$dir" != "X/usr/$acl_libdirstem"; then ++ rpathdirs="$rpathdirs $dir" ++ fi ++ next= ;; ++ *) next= ;; ++ esac ++ fi ++ done ++ if test "X$rpathdirs" != "X"; then ++ if test -n ""$3""; then ++ dnl libtool is used for linking. Use -R options. ++ for dir in $rpathdirs; do ++ $1="${$1}${$1:+ }-R$dir" ++ done ++ else ++ dnl The linker is used for linking directly. ++ if test -n "$acl_hardcode_libdir_separator"; then ++ dnl Weird platform: only the last -rpath option counts, the user ++ dnl must pass all path elements in one option. ++ alldirs= ++ for dir in $rpathdirs; do ++ alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" ++ done ++ acl_save_libdir="$libdir" ++ libdir="$alldirs" ++ eval flag=\"$acl_hardcode_libdir_flag_spec\" ++ libdir="$acl_save_libdir" ++ $1="$flag" ++ else ++ dnl The -rpath options are cumulative. ++ for dir in $rpathdirs; do ++ acl_save_libdir="$libdir" ++ libdir="$dir" ++ eval flag=\"$acl_hardcode_libdir_flag_spec\" ++ libdir="$acl_save_libdir" ++ $1="${$1}${$1:+ }$flag" ++ done ++ fi ++ fi ++ fi ++ fi ++ fi ++ AC_SUBST([$1]) ++]) +diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4 +index 0d895ca..a8684e1 100644 +--- a/m4/lib-prefix.m4 ++++ b/m4/lib-prefix.m4 +@@ -1,4 +1,4 @@ +-# lib-prefix.m4 serial 4 (gettext-0.14.2) ++# lib-prefix.m4 serial 5 (gettext-0.15) + dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, +@@ -24,6 +24,7 @@ AC_DEFUN([AC_LIB_PREFIX], + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) ++ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes +@@ -45,7 +46,7 @@ AC_DEFUN([AC_LIB_PREFIX], + ]) + else + additional_includedir="$withval/include" +- additional_libdir="$withval/lib" ++ additional_libdir="$withval/$acl_libdirstem" + fi + fi + ]) +@@ -87,7 +88,7 @@ AC_DEFUN([AC_LIB_PREFIX], + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. +- if test "X$additional_libdir" != "X/usr/lib"; then ++ if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) +@@ -97,7 +98,7 @@ AC_DEFUN([AC_LIB_PREFIX], + fi + done + if test -z "$haveit"; then +- if test "X$additional_libdir" = "X/usr/local/lib"; then ++ if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; +@@ -151,3 +152,34 @@ AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + ]) ++ ++dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing ++dnl the basename of the libdir, either "lib" or "lib64". ++AC_DEFUN([AC_LIB_PREPARE_MULTILIB], ++[ ++ dnl There is no formal standard regarding lib and lib64. The current ++ dnl practice is that on a system supporting 32-bit and 64-bit instruction ++ dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit ++ dnl libraries go under $prefix/lib. We determine the compiler's default ++ dnl mode by looking at the compiler's library search path. If at least ++ dnl of its elements ends in /lib64 or points to a directory whose absolute ++ dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the ++ dnl default, namely "lib". ++ acl_libdirstem=lib ++ searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` ++ if test -n "$searchpath"; then ++ acl_save_IFS="${IFS= }"; IFS=":" ++ for searchdir in $searchpath; do ++ if test -d "$searchdir"; then ++ case "$searchdir" in ++ */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; ++ *) searchdir=`cd "$searchdir" && pwd` ++ case "$searchdir" in ++ */lib64 ) acl_libdirstem=lib64 ;; ++ esac ;; ++ esac ++ fi ++ done ++ IFS="$acl_save_IFS" ++ fi ++]) + +commit 508bfaf7f46e7c324e503794812bfee6fd422594 +Author: vincent-richard +Date: Mon Feb 15 09:05:49 2010 +0000 + + Fixed test for global constructor failing when cross building. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@533 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index d45aec0..2452745 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -1364,7 +1364,7 @@ sh libtool --mode=link $CXX -o libtest.la -rpath / -version-info 0 mylib.lo >&5 + $CXX -c $CFLAGS $CPPFLAGS mytest.$ac_ext >&5 + sh libtool --mode=link $CXX -o mytest mytest.o libtest.la >&5 2>/dev/null + +-if test -x mytest; then ++if test -x mytest -a "$cross_compiling" != yes; then + myresult=`./mytest` + if test "X$myresult" = "XPASS"; then + AC_MSG_RESULT(yes) + +commit 4ebf3f0343a54af998ac0f039820f790b4c5f255 +Author: vincent-richard +Date: Wed Feb 17 22:27:53 2010 +0000 + + Fixed shebang for systems that don't have /bin/bash. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@534 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/bootstrap b/bootstrap +index 457eaa8..01309ce 100755 +--- a/bootstrap ++++ b/bootstrap +@@ -1,4 +1,5 @@ + #! /bin/bash ++#! /usr/bin/env bash + # + # Bootstrap file for 'autotools' build + # + +commit 253a55ef8991269e0b66bf6b54e1aed0b385cb6b +Author: vincent-richard +Date: Sat Mar 6 12:48:39 2010 +0000 + + Use 'glibtoolize' instead of 'libtoolize' on MacOSX. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@535 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/bootstrap b/bootstrap +index 01309ce..1540429 100755 +--- a/bootstrap ++++ b/bootstrap +@@ -13,6 +13,13 @@ rm -Rf autom4te.cache + (mkdir autotools >& /dev/null) + (cd autotools && rm -f config.guess config.sub missing mkinstalldirs compile ltmain.sh depcomp install-sh) + ++# Check for "glibtoolize" instead of "libtoolize" on OSX ++LIBTOOLIZE=libtoolize ++if which glibtoolize > /dev/null 2>&1; then ++ LIBTOOLIZE=glibtoolize ++fi ++ ++ + DIE=0 + + echo "" +@@ -36,7 +43,7 @@ if test $DIE = 0 ; then + fi + + if test $DIE = 0 ; then +- echo -n "* Running libtoolize... " ; (libtoolize --copy --force --automake >& bootstrap.tmpout) \ ++ echo -n "* Running libtoolize... " ; ($LIBTOOLIZE --copy --force --automake >& bootstrap.tmpout) \ + && (echo "[OK]" ; cat bootstrap.tmpout ; rm -f bootstrap.tmpout) \ + || (echo "[NO]" ; cat bootstrap.tmpout ; rm -f bootstrap.tmpout ; not_a_command >& /dev/null) || DIE=1 + fi + +commit 5ccf29bc69f34dada3dca2f0bf7aac7b6714dffb +Author: vincent-richard +Date: Wed Mar 10 13:29:33 2010 +0000 + + Fixed bug #2966885: memory leak caused by strong ref (thanks to tuxx from SF). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@536 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/security/sasl/defaultSASLAuthenticator.cpp b/src/security/sasl/defaultSASLAuthenticator.cpp +index 06ffc49..32192f7 100644 +--- a/src/security/sasl/defaultSASLAuthenticator.cpp ++++ b/src/security/sasl/defaultSASLAuthenticator.cpp +@@ -96,7 +96,7 @@ const string defaultSASLAuthenticator::getAnonymousToken() const + + const string defaultSASLAuthenticator::getServiceName() const + { +- return m_saslSession->getServiceName(); ++ return m_saslSession.acquire()->getServiceName(); + } + + +@@ -121,7 +121,7 @@ void defaultSASLAuthenticator::setSASLSession(ref sess) + + ref defaultSASLAuthenticator::getSASLSession() const + { +- return m_saslSession; ++ return m_saslSession.acquire(); + } + + +diff --git a/vmime/security/sasl/defaultSASLAuthenticator.hpp b/vmime/security/sasl/defaultSASLAuthenticator.hpp +index a896b65..7595de7 100644 +--- a/vmime/security/sasl/defaultSASLAuthenticator.hpp ++++ b/vmime/security/sasl/defaultSASLAuthenticator.hpp +@@ -67,10 +67,8 @@ private: + + defaultAuthenticator m_default; + +- + weak_ref m_service; +- +- ref m_saslSession; ++ weak_ref m_saslSession; + ref m_saslMech; + }; + + +commit af7be2b3da767f2723879fd78dbbcf991f069715 +Author: vincent-richard +Date: Wed Mar 10 15:54:23 2010 +0000 + + Fixed compilation issue with 'const'. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@537 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/security/sasl/defaultSASLAuthenticator.cpp b/src/security/sasl/defaultSASLAuthenticator.cpp +index 32192f7..4eae4e3 100644 +--- a/src/security/sasl/defaultSASLAuthenticator.cpp ++++ b/src/security/sasl/defaultSASLAuthenticator.cpp +@@ -121,7 +121,7 @@ void defaultSASLAuthenticator::setSASLSession(ref sess) + + ref defaultSASLAuthenticator::getSASLSession() const + { +- return m_saslSession.acquire(); ++ return m_saslSession.acquire().constCast (); + } + + + +commit 2a62318173c8285202bbddbba3fb1e77a1dc9d3a +Author: vincent-richard +Date: Tue Mar 16 08:39:45 2010 +0000 + + Return false instead of throwing an exception if file does not exist in isDirectory(), isFile(), canRead() and canWrite(). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@538 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/posix/posixFile.cpp b/src/platforms/posix/posixFile.cpp +index b814b75..ec529eb 100644 +--- a/src/platforms/posix/posixFile.cpp ++++ b/src/platforms/posix/posixFile.cpp +@@ -306,6 +306,9 @@ bool posixFile::isFile() const + + if (::stat(m_nativePath.c_str(), &buf) == -1) + { ++ if (errno == ENOENT) ++ return false; ++ + posixFileSystemFactory::reportError(m_path, errno); + return false; + } +@@ -320,6 +323,9 @@ bool posixFile::isDirectory() const + + if (::stat(m_nativePath.c_str(), &buf) == -1) + { ++ if (errno == ENOENT) ++ return false; ++ + posixFileSystemFactory::reportError(m_path, errno); + return false; + } +@@ -334,6 +340,9 @@ bool posixFile::canRead() const + + if (::stat(m_nativePath.c_str(), &buf) == -1) + { ++ if (errno == ENOENT) ++ return false; ++ + posixFileSystemFactory::reportError(m_path, errno); + return false; + } +@@ -349,6 +358,9 @@ bool posixFile::canWrite() const + + if (::stat(m_nativePath.c_str(), &buf) == -1) + { ++ if (errno == ENOENT) ++ return false; ++ + posixFileSystemFactory::reportError(m_path, errno); + return false; + } + +commit 298f8712f6e2bb6e0f1b321906eb691793554f05 +Author: vincent-richard +Date: Tue Mar 16 11:54:11 2010 +0000 + + Fixed calls to 'empty' instead of 'clear' (thanks to John van der Kamp, from Zarafa). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@539 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/mailbox.cpp b/src/mailbox.cpp +index 036f003..5cb0139 100644 +--- a/src/mailbox.cpp ++++ b/src/mailbox.cpp +@@ -311,7 +311,7 @@ void mailbox::parse(const string& buffer, const string::size_type position, + // (email address is mandatory, whereas name is optional). + if (address.empty() && !name.empty()) + { +- m_email.empty(); ++ m_email.clear(); + m_email.reserve(name.size()); + m_name.removeAllWords(); + +@@ -324,7 +324,7 @@ void mailbox::parse(const string& buffer, const string::size_type position, + else + { + text::decodeAndUnfold(name, &m_name); +- m_email.empty(); ++ m_email.clear(); + m_email.reserve(address.size()); + + for (string::size_type i = 0 ; i < address.size() ; ++i) + +commit ec603c6c52734c44467f17dfded90a38e3516d3a +Author: vincent-richard +Date: Tue Mar 16 15:55:47 2010 +0000 + + Migrated config script for newer versions of SCons. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@540 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 2452745..384c90f 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -436,7 +436,7 @@ libvmime_dist_files += libvmime_autotools + # Set options # + ################# + +-EnsureSConsVersion(0, 94) ++EnsureSConsVersion(0, 98, 1) + + SetOption('implicit_cache', 1) + +@@ -578,7 +578,10 @@ opts.AddVariables( + # Configuration Environment # + ############################### + +-env = Environment(options = opts) ++try: ++ env = Environment(variables = opts) ++except TypeError: ++ env = Environment(options = opts) + + env.Append(ENV = os.environ) + env.Append(ENV = {'PATH' : os.environ['PATH']}) +@@ -953,7 +956,7 @@ Default(libVmime) + # Tests + if env['build_tests'] == 'yes': + if env['debug'] == 'yes': +- env = env.Copy() ++ env = env.Clone() + env.Append(LIBS = ['cppunit', 'dl', packageVersionedGenericName + '-debug', 'pthread']) + env.Append(LIBPATH=['.']) + Default( + +commit 586397b44f047e1c3be7936cf5538f32769c6e47 +Author: vincent-richard +Date: Thu Apr 8 18:28:22 2010 +0000 + + Fixed parsing of non-significant whitespaces in field values. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@541 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/parameterizedHeaderField.cpp b/src/parameterizedHeaderField.cpp +index 090d5b4..464990e 100644 +--- a/src/parameterizedHeaderField.cpp ++++ b/src/parameterizedHeaderField.cpp +@@ -85,12 +85,32 @@ void parameterizedHeaderField::parse(const string& buffer, const string::size_ty + const string::value_type* const pstart = buffer.data() + position; + const string::value_type* p = pstart; + +- const string::size_type start = position; ++ // Skip non-significant whitespaces ++ string::size_type valueStart = position; + +- while (p < pend && *p != ';') ++p; ++ while (p < pend && parserHelpers::isSpace(*p)) ++ { ++ ++p; ++ ++valueStart; ++ } ++ ++ // Advance up to ';', if any ++ string::size_type valueLength = 0; ++ ++ while (p < pend && *p != ';') // FIXME: support ";" inside quoted or RFC-2047-encoded text ++ { ++ ++p; ++ ++valueLength; ++ } ++ ++ // Trim whitespaces at the end of the value ++ while (valueLength > 0 && parserHelpers::isSpace(buffer[valueStart + valueLength - 1])) ++ --valueLength; + +- getValue()->parse(buffer, start, position + (p - pstart)); ++ // Parse value ++ getValue()->parse(buffer, valueStart, valueStart + valueLength); + ++ // Reset parameters + removeAllParameters(); + + // If there is one or more parameters following... +diff --git a/tests/parser/parameterTest.cpp b/tests/parser/parameterTest.cpp +index 6d24438..803bb59 100644 +--- a/tests/parser/parameterTest.cpp ++++ b/tests/parser/parameterTest.cpp +@@ -36,6 +36,7 @@ VMIME_TEST_SUITE_BEGIN + VMIME_TEST(testGenerate) + VMIME_TEST(testGenerateRFC2231) + VMIME_TEST(testNonStandardEncodedParam) ++ VMIME_TEST(testParseNonSignificantWS) + VMIME_TEST_LIST_END + + +@@ -53,6 +54,7 @@ VMIME_TEST_SUITE_BEGIN + }; + + ++#define FIELD_VALUE(f) (f.getValue()->generate()) + #define PARAM_VALUE(p, n) (p.getParameterAt(n)->getValue().generate()) + #define PARAM_NAME(p, n) (p.getParameterAt(n)->getName()) + #define PARAM_CHARSET(p, n) \ +@@ -278,5 +280,22 @@ VMIME_TEST_SUITE_BEGIN + VASSERT_EQ("2.3", "Logo VMime.png", PARAM_VALUE(p2, 0)); + } + ++ // Parse parameters with non-significant whitespaces ++ void testParseNonSignificantWS() ++ { ++ parameterizedHeaderField p1; ++ p1.parse(" \t X \r\n"); ++ ++ VASSERT_EQ("1.1", "X", FIELD_VALUE(p1)); ++ ++ parameterizedHeaderField p2; ++ p2.parse(" X ; param1 = value1 \r\n"); ++ ++ VASSERT_EQ("2.1", 1, p2.getParameterCount()); ++ VASSERT_EQ("2.2", "X", FIELD_VALUE(p2)); ++ VASSERT_EQ("2.3", "param1", PARAM_NAME(p2, 0)); ++ VASSERT_EQ("2.4", "value1", PARAM_VALUE(p2, 0)); ++ } ++ + VMIME_TEST_SUITE_END + + +commit 29a45062173bede8d485af035c92e00b894172f7 +Author: vincent-richard +Date: Sat Apr 10 06:43:40 2010 +0000 + + Fixed duplicate shebang. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@542 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/bootstrap b/bootstrap +index 1540429..9c9c3d3 100755 +--- a/bootstrap ++++ b/bootstrap +@@ -1,4 +1,3 @@ +-#! /bin/bash + #! /usr/bin/env bash + # + # Bootstrap file for 'autotools' build + +commit a198fe0e65788519507e527e6b0a52d25bd970a1 +Author: vincent-richard +Date: Tue Apr 13 09:51:30 2010 +0000 + + Register non-standard encoding names. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@543 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/utility/encoder/encoderFactory.cpp b/src/utility/encoder/encoderFactory.cpp +index 428788d..2237178 100644 +--- a/src/utility/encoder/encoderFactory.cpp ++++ b/src/utility/encoder/encoderFactory.cpp +@@ -46,6 +46,10 @@ encoderFactory::encoderFactory() + registerName ("7bit"); + registerName ("8bit"); + registerName ("binary"); ++ ++ // Also register some non-standard encoding names ++ registerName ("7-bit"); ++ registerName ("8-bit"); + } + + + +commit 596b8882088f0c12f7c4ae1848b24cd521112131 +Author: vincent-richard +Date: Tue May 4 10:07:56 2010 +0000 + + Fixed typo. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@544 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 384c90f..d05f8bc 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -1071,7 +1071,7 @@ def generateAutotools(target, source, env): + # Generate pkg-config file for shared and static library + vmime_pc_in = open(packageVersionedGenericName + ".pc.in", 'w') + vmime_pc_in.write("# File automatically generated by SConstruct ('scons autotools')\n") +- vmime_pc_in.write("# DOT NOT EDIT!\n") ++ vmime_pc_in.write("# DO NOT EDIT!\n") + vmime_pc_in.write("\n") + vmime_pc_in.write("prefix=@prefix@\n") + vmime_pc_in.write("exec_prefix=@exec_prefix@\n") +@@ -1091,7 +1091,7 @@ def generateAutotools(target, source, env): + Makefile_am = open("Makefile.am", 'w') + Makefile_am.write(""" + # File automatically generated by SConstruct ('scons autotools') +-# DOT NOT EDIT! ++# DO NOT EDIT! + + BINDING = + INCLUDE = vmime +@@ -1123,7 +1123,7 @@ docdir = $(datadir)/doc/$(GENERIC_LIBRARY_NAME) + Makefile_am = open("vmime/Makefile.am", 'w') + Makefile_am.write(""" + # File automatically generated by SConstruct ('scons autotools') +-# DOT NOT EDIT! ++# DO NOT EDIT! + """) + + #Makefile_am.write(packageVersionedName + "includedir = $(prefix)/include/@GENERIC_VERSIONED_LIBRARY_NAME@/@GENERIC_LIBRARY_NAME@\n") +@@ -1145,7 +1145,7 @@ docdir = $(datadir)/doc/$(GENERIC_LIBRARY_NAME) + Makefile_am = open("src/Makefile.am", 'w') + Makefile_am.write(""" + # File automatically generated by SConstruct ('scons autotools') +-# DOT NOT EDIT! ++# DO NOT EDIT! + + AUTOMAKE_OPTIONS = no-dependencies foreign + INTERNALS = +@@ -1235,7 +1235,7 @@ noinst_HEADERS = $(INTERNALS) + # configure.in + + # File automatically generated by SConstruct ('scons autotools') +-# DOT NOT EDIT! ++# DO NOT EDIT! + + # Init + """) + +commit 926e5c458c5e1c2950c29043e1f7464d26d20c6b +Author: vincent-richard +Date: Tue May 4 10:49:10 2010 +0000 + + Use STARTTLS for additional connections (thanks to Andrei). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@545 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/imap/IMAPConnection.cpp b/src/net/imap/IMAPConnection.cpp +index 6e5a265..825a002 100644 +--- a/src/net/imap/IMAPConnection.cpp ++++ b/src/net/imap/IMAPConnection.cpp +@@ -156,7 +156,7 @@ void IMAPConnection::connect() + const bool tlsRequired = HAS_PROPERTY(PROPERTY_CONNECTION_TLS_REQUIRED) + && GET_PROPERTY(bool, PROPERTY_CONNECTION_TLS_REQUIRED); + +- if (!store->isSecuredConnection() && tls) // only if not IMAPS ++ if (!store->isIMAPS() && tls) // only if not IMAPS + { + try + { + +commit 9577cf0e03906b13210de550ee806f92fc45a373 +Author: vincent-richard +Date: Fri May 14 16:56:20 2010 +0000 + + Fixed parsing of header field value with no data on the first line (folding). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@546 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/headerField.cpp b/src/headerField.cpp +index 52fe7e8..cdde8ec 100644 +--- a/src/headerField.cpp ++++ b/src/headerField.cpp +@@ -146,6 +146,12 @@ ref headerField::parseNext(const string& buffer, const string::siz + { + c = buffer[pos]; + ++ // Check for folded line ++ if (c == '\r' && pos + 2 < end && buffer[pos + 1] == '\n' && ++ (buffer[pos + 2] == ' ' || buffer[pos + 2] == '\t')) ++ { ++ pos += 3; ++ } + // Check for end of contents + if (c == '\r' && pos + 1 < end && buffer[pos + 1] == '\n') + { + +commit 25cb2c1432f4912106ab70dc1cea00fee21b91c0 +Author: vincent-richard +Date: Tue May 18 13:52:27 2010 +0000 + + Added helper function to construct parsed message from net message. Splitted IMAP source files. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@547 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/ChangeLog b/ChangeLog +index 4031746..b824b4c 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -2,6 +2,11 @@ + VERSION 0.9.1svn + ================ + ++2010-05-18 Vincent Richard ++ ++ * net/*: added helper function vmime::net::message::getParsedMessage() ++ to construct a RFC-822 parsed message from a net message. ++ + 2009-09-06 Vincent Richard + + * Relicensed VMime under the GNU GPL license version 3. Dual licensing +diff --git a/SConstruct b/SConstruct +index d05f8bc..99b2190 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -261,6 +261,9 @@ libvmime_messaging_proto_sources = [ + 'net/imap/IMAPMessage.cpp', 'net/imap/IMAPMessage.hpp', + 'net/imap/IMAPTag.cpp', 'net/imap/IMAPTag.hpp', + 'net/imap/IMAPUtils.cpp', 'net/imap/IMAPUtils.hpp', ++ 'net/imap/IMAPMessagePartContentHandler.cpp', 'net/imap/IMAPMessagePartContentHandler.hpp', ++ 'net/imap/IMAPStructure.cpp', 'net/imap/IMAPStructure.hpp', ++ 'net/imap/IMAPPart.cpp', 'net/imap/IMAPPart.hpp', + 'net/imap/IMAPParser.hpp', + ] + ], +diff --git a/src/bodyPart.cpp b/src/bodyPart.cpp +index 20bb102..7d60461 100644 +--- a/src/bodyPart.cpp ++++ b/src/bodyPart.cpp +@@ -37,6 +37,15 @@ bodyPart::bodyPart() + } + + ++bodyPart::bodyPart(weak_ref parentPart) ++ : m_header(vmime::create
()), ++ m_body(vmime::create ()), ++ m_parent(parentPart) ++{ ++ m_body->setParentPart(thisRef().dynamicCast ()); ++} ++ ++ + void bodyPart::parse(const string& buffer, const string::size_type position, + const string::size_type end, string::size_type* newPosition) + { +diff --git a/src/headerField.cpp b/src/headerField.cpp +index cdde8ec..d1d4236 100644 +--- a/src/headerField.cpp ++++ b/src/headerField.cpp +@@ -300,7 +300,8 @@ const std::vector > headerField::getChildComponents() con + { + std::vector > list; + +- list.push_back(m_value); ++ if (m_value) ++ list.push_back(m_value); + + return (list); + } +diff --git a/src/net/imap/IMAPMessage.cpp b/src/net/imap/IMAPMessage.cpp +index 29c2aea..adfef01 100644 +--- a/src/net/imap/IMAPMessage.cpp ++++ b/src/net/imap/IMAPMessage.cpp +@@ -27,6 +27,9 @@ + #include "vmime/net/imap/IMAPStore.hpp" + #include "vmime/net/imap/IMAPConnection.hpp" + #include "vmime/net/imap/IMAPUtils.hpp" ++#include "vmime/net/imap/IMAPStructure.hpp" ++#include "vmime/net/imap/IMAPPart.hpp" ++#include "vmime/net/imap/IMAPMessagePartContentHandler.hpp" + + #include + #include +@@ -38,198 +41,6 @@ namespace net { + namespace imap { + + +-// +-// IMAPpart +-// +- +-class IMAPstructure; +- +-class IMAPpart : public part +-{ +-private: +- +- friend class vmime::creator; +- +- IMAPpart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart); +- IMAPpart(ref parent, const int number, const IMAPParser::body_type_1part* part); +- +-public: +- +- ref getStructure() const; +- ref getStructure(); +- +- ref getParent() const { return m_parent.acquire(); } +- +- const mediaType& getType() const { return (m_mediaType); } +- int getSize() const { return (m_size); } +- int getNumber() const { return (m_number); } +- +- ref getHeader() const +- { +- if (m_header == NULL) +- throw exceptions::unfetched_object(); +- else +- return m_header; +- } +- +- +- static ref create +- (ref parent, const int number, const IMAPParser::body* body) +- { +- if (body->body_type_mpart()) +- { +- ref part = vmime::create (parent, number, body->body_type_mpart()); +- part->m_structure = vmime::create (part, body->body_type_mpart()->list()); +- +- return part; +- } +- else +- { +- return vmime::create (parent, number, body->body_type_1part()); +- } +- } +- +- +- header& getOrCreateHeader() +- { +- if (m_header != NULL) +- return (*m_header); +- else +- return (*(m_header = vmime::create
())); +- } +- +-private: +- +- ref m_structure; +- weak_ref m_parent; +- ref
m_header; +- +- int m_number; +- int m_size; +- mediaType m_mediaType; +-}; +- +- +- +-// +-// IMAPstructure +-// +- +-class IMAPstructure : public structure +-{ +-public: +- +- IMAPstructure() +- { +- } +- +- IMAPstructure(const IMAPParser::body* body) +- { +- m_parts.push_back(IMAPpart::create(NULL, 0, body)); +- } +- +- IMAPstructure(ref parent, const std::vector & list) +- { +- int number = 0; +- +- for (std::vector ::const_iterator +- it = list.begin() ; it != list.end() ; ++it, ++number) +- { +- m_parts.push_back(IMAPpart::create(parent, number, *it)); +- } +- } +- +- +- ref getPartAt(const int x) const +- { +- return m_parts[x]; +- } +- +- ref getPartAt(const int x) +- { +- return m_parts[x]; +- } +- +- int getPartCount() const +- { +- return m_parts.size(); +- } +- +- +- static ref emptyStructure() +- { +- return (m_emptyStructure); +- } +- +-private: +- +- static ref m_emptyStructure; +- +- std::vector > m_parts; +-}; +- +- +-ref IMAPstructure::m_emptyStructure = vmime::create (); +- +- +- +-IMAPpart::IMAPpart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart) +- : m_parent(parent), m_header(NULL), m_number(number), m_size(0) +-{ +- m_mediaType = vmime::mediaType +- ("multipart", mpart->media_subtype()->value()); +-} +- +- +-IMAPpart::IMAPpart(ref parent, const int number, const IMAPParser::body_type_1part* part) +- : m_parent(parent), m_header(NULL), m_number(number), m_size(0) +-{ +- if (part->body_type_text()) +- { +- m_mediaType = vmime::mediaType +- ("text", part->body_type_text()-> +- media_text()->media_subtype()->value()); +- +- m_size = part->body_type_text()->body_fields()->body_fld_octets()->value(); +- } +- else if (part->body_type_msg()) +- { +- m_mediaType = vmime::mediaType +- ("message", part->body_type_msg()-> +- media_message()->media_subtype()->value()); +- } +- else +- { +- m_mediaType = vmime::mediaType +- (part->body_type_basic()->media_basic()->media_type()->value(), +- part->body_type_basic()->media_basic()->media_subtype()->value()); +- +- m_size = part->body_type_basic()->body_fields()->body_fld_octets()->value(); +- } +- +- m_structure = NULL; +-} +- +- +-ref IMAPpart::getStructure() const +-{ +- if (m_structure != NULL) +- return (m_structure); +- else +- return (IMAPstructure::emptyStructure()); +-} +- +- +-ref IMAPpart::getStructure() +-{ +- if (m_structure != NULL) +- return (m_structure); +- else +- return (IMAPstructure::emptyStructure()); +-} +- +- +- + #ifndef VMIME_BUILDING_DOC + + // +@@ -400,7 +211,22 @@ void IMAPMessage::fetchPartHeader(ref p) + + extract(p, ossAdapter, NULL, 0, -1, true, true); + +- p.dynamicCast ()->getOrCreateHeader().parse(oss.str()); ++ p.dynamicCast ()->getOrCreateHeader().parse(oss.str()); ++} ++ ++ ++void IMAPMessage::fetchPartHeaderForStructure(ref str) ++{ ++ for (int i = 0, n = str->getPartCount() ; i < n ; ++i) ++ { ++ ref part = str->getPartAt(i); ++ ++ // Fetch header of current part ++ fetchPartHeader(part); ++ ++ // Fetch header of sub-parts ++ fetchPartHeaderForStructure(part->getStructure()); ++ } + } + + +@@ -418,7 +244,7 @@ void IMAPMessage::extract(ref p, utility::outputStream& os, + + if (p != NULL) + { +- ref currentPart = p.dynamicCast (); ++ ref currentPart = p.dynamicCast (); + std::vector numbers; + + numbers.push_back(currentPart->getNumber()); +@@ -446,8 +272,17 @@ void IMAPMessage::extract(ref p, utility::outputStream& os, + command << "FETCH " << m_num << " BODY"; + if (peek) command << ".PEEK"; + command << "["; +- command << section.str(); +- if (headerOnly) command << ".MIME"; // "MIME" not "HEADER" for parts ++ ++ if (section.str().empty() && headerOnly) ++ { ++ command << "HEADER"; ++ } ++ else ++ { ++ command << section.str(); ++ if (headerOnly) command << ".MIME"; // "MIME" not "HEADER" for parts ++ } ++ + command << "]"; + + if (start != 0 || length != -1) +@@ -621,7 +456,7 @@ void IMAPMessage::processFetchResponse + } + case IMAPParser::msg_att_item::BODY_STRUCTURE: + { +- m_structure = vmime::create ((*it)->body()); ++ m_structure = vmime::create ((*it)->body()); + break; + } + case IMAPParser::msg_att_item::RFC822_HEADER: +@@ -796,6 +631,80 @@ void IMAPMessage::setFlags(const int flags, const int mode) + } + + ++void IMAPMessage::constructParsedMessage(ref parentPart, ref str, int level) ++{ ++ if (level == 0) ++ { ++ ref part = str->getPartAt(0); ++ ++ // Copy header ++ ref hdr = part->getHeader(); ++ parentPart->getHeader()->copyFrom(*hdr); ++ ++ // Initialize body ++ parentPart->getBody()->setContents ++ (vmime::create ++ (thisRef().dynamicCast (), ++ part, parentPart->getBody()->getEncoding())); ++ ++ constructParsedMessage(parentPart, part->getStructure(), 1); ++ } ++ else ++ { ++ for (int i = 0, n = str->getPartCount() ; i < n ; ++i) ++ { ++ ref part = str->getPartAt(i); ++ ++ ref childPart = vmime::create (); ++ ++ // Copy header ++ ref hdr = part->getHeader(); ++ childPart->getHeader()->copyFrom(*hdr); ++ ++ // Initialize body ++ childPart->getBody()->setContents ++ (vmime::create ++ (thisRef().dynamicCast (), ++ part, childPart->getBody()->getEncoding())); ++ ++ // Add child part ++ parentPart->getBody()->appendPart(childPart); ++ ++ // Construct sub parts ++ constructParsedMessage(childPart, part->getStructure(), ++level); ++ } ++ } ++} ++ ++ ++ref IMAPMessage::getParsedMessage() ++{ ++ // Fetch structure ++ ref structure = NULL; ++ ++ try ++ { ++ structure = getStructure(); ++ } ++ catch (exceptions::unfetched_object&) ++ { ++ fetch(m_folder.acquire(), IMAPFolder::FETCH_STRUCTURE); ++ structure = getStructure(); ++ } ++ ++ // Fetch header for each part ++ fetchPartHeaderForStructure(structure); ++ ++ // Construct message from structure ++ ref msg = vmime::create (); ++ ++ constructParsedMessage(msg, structure); ++ ++ return msg; ++} ++ ++ + } // imap + } // net + } // vmime ++ +diff --git a/src/net/imap/IMAPMessagePartContentHandler.cpp b/src/net/imap/IMAPMessagePartContentHandler.cpp +new file mode 100644 +index 0000000..12d387c +--- /dev/null ++++ b/src/net/imap/IMAPMessagePartContentHandler.cpp +@@ -0,0 +1,179 @@ ++// ++// VMime library (http://www.vmime.org) ++// Copyright (C) 2002-2009 Vincent Richard ++// ++// 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 3 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-1301 USA. ++// ++// 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 cover the whole combination. ++// ++ ++#include "vmime/net/imap/imapmessagepartcontenthandler.hpp" ++ ++ ++namespace vmime { ++namespace net { ++namespace imap { ++ ++ ++IMAPMessagePartContentHandler::IMAPMessagePartContentHandler ++ (ref msg, ref part, const vmime::encoding& encoding) ++ : m_message(msg), m_part(part), m_encoding(encoding) ++{ ++} ++ ++ ++ref IMAPMessagePartContentHandler::clone() const ++{ ++ return create ++ (m_message.acquire().constCast (), ++ m_part.acquire().constCast (), ++ m_encoding); ++} ++ ++ ++void IMAPMessagePartContentHandler::generate ++ (utility::outputStream& os, const vmime::encoding& enc, const string::size_type maxLineLength) const ++{ ++ ref msg = m_message.acquire().constCast (); ++ ref part = m_part.acquire().constCast (); ++ ++ // Data is already encoded ++ if (isEncoded()) ++ { ++ // The data is already encoded but the encoding specified for ++ // the generation is different from the current one. We need ++ // to re-encode data: decode from input buffer to temporary ++ // buffer, and then re-encode to output stream... ++ if (m_encoding != enc) ++ { ++ // Extract part contents to temporary buffer ++ std::ostringstream oss; ++ utility::outputStreamAdapter tmp(oss); ++ ++ msg->extractPart(part, tmp, NULL); ++ ++ // Decode to another temporary buffer ++ utility::inputStreamStringProxyAdapter in(oss.str()); ++ ++ std::ostringstream oss2; ++ utility::outputStreamAdapter tmp2(oss2); ++ ++ ref theDecoder = m_encoding.getEncoder(); ++ theDecoder->decode(in, tmp2); ++ ++ // Reencode to output stream ++ string str = oss2.str(); ++ utility::inputStreamStringAdapter tempIn(str); ++ ++ ref theEncoder = enc.getEncoder(); ++ theEncoder->getProperties()["maxlinelength"] = maxLineLength; ++ theEncoder->encode(tempIn, os); ++ } ++ // No encoding to perform ++ else ++ { ++ msg->extractPart(part, os); ++ } ++ } ++ // Need to encode data before ++ else ++ { ++ // Extract part contents to temporary buffer ++ std::ostringstream oss; ++ utility::outputStreamAdapter tmp(oss); ++ ++ msg->extractPart(part, tmp, NULL); ++ ++ // Encode temporary buffer to output stream ++ ref theEncoder = enc.getEncoder(); ++ theEncoder->getProperties()["maxlinelength"] = maxLineLength; ++ ++ utility::inputStreamStringAdapter is(oss.str()); ++ ++ theEncoder->encode(is, os); ++ } ++} ++ ++ ++void IMAPMessagePartContentHandler::extract ++ (utility::outputStream& os, utility::progressListener* progress) const ++{ ++ ref msg = m_message.acquire().constCast (); ++ ref part = m_part.acquire().constCast (); ++ ++ // No decoding to perform ++ if (!isEncoded()) ++ { ++ msg->extractPart(part, os, progress); ++ } ++ // Need to decode data ++ else ++ { ++ // Extract part contents to temporary buffer ++ std::ostringstream oss; ++ utility::outputStreamAdapter tmp(oss); ++ ++ msg->extractPart(part, tmp, NULL); ++ ++ // Encode temporary buffer to output stream ++ utility::inputStreamStringAdapter is(oss.str()); ++ utility::progressListenerSizeAdapter plsa(progress, getLength()); ++ ++ ref theDecoder = m_encoding.getEncoder(); ++ theDecoder->decode(is, os, &plsa); ++ } ++} ++ ++ ++void IMAPMessagePartContentHandler::extractRaw ++ (utility::outputStream& os, utility::progressListener* progress) const ++{ ++ ref msg = m_message.acquire().constCast (); ++ ref part = m_part.acquire().constCast (); ++ ++ msg->extractPart(part, os, progress); ++} ++ ++ ++string::size_type IMAPMessagePartContentHandler::getLength() const ++{ ++ return m_part.acquire()->getSize(); ++} ++ ++ ++bool IMAPMessagePartContentHandler::isEncoded() const ++{ ++ return m_encoding != NO_ENCODING; ++} ++ ++ ++const vmime::encoding& IMAPMessagePartContentHandler::getEncoding() const ++{ ++ return m_encoding; ++} ++ ++ ++bool IMAPMessagePartContentHandler::isEmpty() const ++{ ++ return getLength() == 0; ++} ++ ++ ++} // imap ++} // net ++} // vmime ++ +diff --git a/src/net/imap/IMAPPart.cpp b/src/net/imap/IMAPPart.cpp +new file mode 100644 +index 0000000..32021e8 +--- /dev/null ++++ b/src/net/imap/IMAPPart.cpp +@@ -0,0 +1,152 @@ ++// ++// VMime library (http://www.vmime.org) ++// Copyright (C) 2002-2009 Vincent Richard ++// ++// 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 3 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-1301 USA. ++// ++// 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 cover the whole combination. ++// ++ ++#include "vmime/net/imap/IMAPPart.hpp" ++#include "vmime/net/imap/IMAPStructure.hpp" ++ ++ ++namespace vmime { ++namespace net { ++namespace imap { ++ ++ ++IMAPPart::IMAPPart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart) ++ : m_parent(parent), m_header(NULL), m_number(number), m_size(0) ++{ ++ m_mediaType = vmime::mediaType ++ ("multipart", mpart->media_subtype()->value()); ++} ++ ++ ++IMAPPart::IMAPPart(ref parent, const int number, const IMAPParser::body_type_1part* part) ++ : m_parent(parent), m_header(NULL), m_number(number), m_size(0) ++{ ++ if (part->body_type_text()) ++ { ++ m_mediaType = vmime::mediaType ++ ("text", part->body_type_text()-> ++ media_text()->media_subtype()->value()); ++ ++ m_size = part->body_type_text()->body_fields()->body_fld_octets()->value(); ++ } ++ else if (part->body_type_msg()) ++ { ++ m_mediaType = vmime::mediaType ++ ("message", part->body_type_msg()-> ++ media_message()->media_subtype()->value()); ++ } ++ else ++ { ++ m_mediaType = vmime::mediaType ++ (part->body_type_basic()->media_basic()->media_type()->value(), ++ part->body_type_basic()->media_basic()->media_subtype()->value()); ++ ++ m_size = part->body_type_basic()->body_fields()->body_fld_octets()->value(); ++ } ++ ++ m_structure = NULL; ++} ++ ++ ++ref IMAPPart::getStructure() const ++{ ++ if (m_structure != NULL) ++ return m_structure; ++ else ++ return IMAPStructure::emptyStructure(); ++} ++ ++ ++ref IMAPPart::getStructure() ++{ ++ if (m_structure != NULL) ++ return m_structure; ++ else ++ return IMAPStructure::emptyStructure(); ++} ++ ++ ++ref IMAPPart::getParent() const ++{ ++ return m_parent.acquire(); ++} ++ ++ ++const mediaType& IMAPPart::getType() const ++{ ++ return m_mediaType; ++} ++ ++ ++int IMAPPart::getSize() const ++{ ++ return m_size; ++} ++ ++ ++int IMAPPart::getNumber() const ++{ ++ return m_number; ++} ++ ++ ++ref IMAPPart::getHeader() const ++{ ++ if (m_header == NULL) ++ throw exceptions::unfetched_object(); ++ else ++ return m_header; ++} ++ ++ ++// static ++ref IMAPPart::create ++ (ref parent, const int number, const IMAPParser::body* body) ++{ ++ if (body->body_type_mpart()) ++ { ++ ref part = vmime::create (parent, number, body->body_type_mpart()); ++ part->m_structure = vmime::create (part, body->body_type_mpart()->list()); ++ ++ return part; ++ } ++ else ++ { ++ return vmime::create (parent, number, body->body_type_1part()); ++ } ++} ++ ++ ++header& IMAPPart::getOrCreateHeader() ++{ ++ if (m_header != NULL) ++ return *m_header; ++ else ++ return *(m_header = vmime::create
()); ++} ++ ++ ++} // imap ++} // net ++} // vmime ++ +diff --git a/src/net/imap/IMAPStructure.cpp b/src/net/imap/IMAPStructure.cpp +new file mode 100644 +index 0000000..357febe +--- /dev/null ++++ b/src/net/imap/IMAPStructure.cpp +@@ -0,0 +1,85 @@ ++// ++// VMime library (http://www.vmime.org) ++// Copyright (C) 2002-2009 Vincent Richard ++// ++// 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 3 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-1301 USA. ++// ++// 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 cover the whole combination. ++// ++ ++#include "vmime/net/imap/IMAPStructure.hpp" ++#include "vmime/net/imap/IMAPPart.hpp" ++ ++ ++namespace vmime { ++namespace net { ++namespace imap { ++ ++ ++IMAPStructure::IMAPStructure() ++{ ++} ++ ++ ++IMAPStructure::IMAPStructure(const IMAPParser::body* body) ++{ ++ m_parts.push_back(IMAPPart::create(NULL, 0, body)); ++} ++ ++ ++IMAPStructure::IMAPStructure(ref parent, const std::vector & list) ++{ ++ int number = 0; ++ ++ for (std::vector ::const_iterator ++ it = list.begin() ; it != list.end() ; ++it, ++number) ++ { ++ m_parts.push_back(IMAPPart::create(parent, number, *it)); ++ } ++} ++ ++ ++ref IMAPStructure::getPartAt(const int x) const ++{ ++ return m_parts[x]; ++} ++ ++ ++ref IMAPStructure::getPartAt(const int x) ++{ ++ return m_parts[x]; ++} ++ ++ ++int IMAPStructure::getPartCount() const ++{ ++ return m_parts.size(); ++} ++ ++ ++// static ++ref IMAPStructure::emptyStructure() ++{ ++ static ref emptyStructure = vmime::create (); ++ return emptyStructure; ++} ++ ++ ++} // imap ++} // net ++} // vmime ++ +diff --git a/src/net/maildir/maildirMessage.cpp b/src/net/maildir/maildirMessage.cpp +index 8999d84..51cd1ba 100644 +--- a/src/net/maildir/maildirMessage.cpp ++++ b/src/net/maildir/maildirMessage.cpp +@@ -524,6 +524,20 @@ ref
maildirMessage::getOrCreateHeader() + } + + ++ref maildirMessage::getParsedMessage() ++{ ++ std::ostringstream oss; ++ utility::outputStreamAdapter os(oss); ++ ++ extract(os); ++ ++ vmime::ref msg = vmime::create (); ++ msg->parse(oss.str()); ++ ++ return msg; ++} ++ ++ + } // maildir + } // net + } // vmime +diff --git a/src/net/pop3/POP3Message.cpp b/src/net/pop3/POP3Message.cpp +index b38951b..50f4f87 100644 +--- a/src/net/pop3/POP3Message.cpp ++++ b/src/net/pop3/POP3Message.cpp +@@ -218,6 +218,20 @@ void POP3Message::setFlags(const int /* flags */, const int /* mode */) + } + + ++ref POP3Message::getParsedMessage() ++{ ++ std::ostringstream oss; ++ utility::outputStreamAdapter os(oss); ++ ++ extract(os); ++ ++ vmime::ref msg = vmime::create (); ++ msg->parse(oss.str()); ++ ++ return msg; ++} ++ ++ + } // pop3 + } // net + } // vmime +diff --git a/vmime/bodyPart.hpp b/vmime/bodyPart.hpp +index 47c11cb..aa0f040 100644 +--- a/vmime/bodyPart.hpp ++++ b/vmime/bodyPart.hpp +@@ -46,6 +46,7 @@ class bodyPart : public component + public: + + bodyPart(); ++ bodyPart(weak_ref parentPart); + + /** Return the header section of this part. + * +diff --git a/vmime/contentHandler.hpp b/vmime/contentHandler.hpp +index aa485f5..38e4e24 100644 +--- a/vmime/contentHandler.hpp ++++ b/vmime/contentHandler.hpp +@@ -87,7 +87,8 @@ public: + virtual void extractRaw(utility::outputStream& os, utility::progressListener* progress = NULL) const = 0; + + /** Returns the actual length of data. WARNING: this can return 0 if no +- * length was specified when setting data of this object. ++ * length was specified when setting data of this object, or if the ++ * length is not known). + * + * @return length of data + */ +diff --git a/vmime/net/imap/IMAPMessage.hpp b/vmime/net/imap/IMAPMessage.hpp +index 690e5e2..edbf69f 100644 +--- a/vmime/net/imap/IMAPMessage.hpp ++++ b/vmime/net/imap/IMAPMessage.hpp +@@ -28,6 +28,8 @@ + #include "vmime/net/message.hpp" + #include "vmime/net/folder.hpp" + ++#include "vmime/net/imap/IMAPParser.hpp" ++ + + namespace vmime { + namespace net { +@@ -75,12 +77,29 @@ public: + + void fetchPartHeader(ref p); + ++ ref getParsedMessage(); ++ + private: + + void fetch(ref folder, const int options); + + void processFetchResponse(const int options, const IMAPParser::msg_att* msgAtt); + ++ /** Recursively fetch part header for all parts in the structure. ++ * ++ * @param str structure for which to fetch parts headers ++ */ ++ void fetchPartHeaderForStructure(ref str); ++ ++ /** Recursively contruct parsed message from structure. ++ * Called by getParsedMessage(). ++ * ++ * @param parentPart root body part (the message) ++ * @param str structure for which to construct part ++ * @param level current nesting level (0 is root) ++ */ ++ void constructParsedMessage(ref parentPart, ref str, int level = 0); ++ + void extract(ref p, utility::outputStream& os, utility::progressListener* progress, const int start, const int length, const bool headerOnly, const bool peek) const; + + +diff --git a/vmime/net/imap/IMAPMessagePartContentHandler.hpp b/vmime/net/imap/IMAPMessagePartContentHandler.hpp +new file mode 100644 +index 0000000..0c4641e +--- /dev/null ++++ b/vmime/net/imap/IMAPMessagePartContentHandler.hpp +@@ -0,0 +1,73 @@ ++// ++// VMime library (http://www.vmime.org) ++// Copyright (C) 2002-2009 Vincent Richard ++// ++// 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 3 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-1301 USA. ++// ++// 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 cover the whole combination. ++// ++ ++#ifndef VMIME_NET_IMAP_IMAPMESSAGEPARTCONTENTHANDLER_HPP_INCLUDED ++#define VMIME_NET_IMAP_IMAPMESSAGEPARTCONTENTHANDLER_HPP_INCLUDED ++ ++ ++#include "vmime/contentHandler.hpp" ++#include "vmime/net/imap/IMAPMessage.hpp" ++ ++ ++namespace vmime { ++namespace net { ++namespace imap { ++ ++ ++class IMAPMessagePartContentHandler : public contentHandler ++{ ++public: ++ ++ IMAPMessagePartContentHandler(ref msg, ref part, const vmime::encoding& encoding); ++ ++ ref clone() const; ++ ++ void generate(utility::outputStream& os, const vmime::encoding& enc, const string::size_type maxLineLength = lineLengthLimits::infinite) const; ++ ++ void extract(utility::outputStream& os, utility::progressListener* progress = NULL) const; ++ void extractRaw(utility::outputStream& os, utility::progressListener* progress = NULL) const; ++ ++ string::size_type getLength() const; ++ ++ bool isEncoded() const; ++ ++ const vmime::encoding& getEncoding() const; ++ ++ bool isEmpty() const; ++ ++private: ++ ++ weak_ref m_message; ++ weak_ref m_part; ++ ++ vmime::encoding m_encoding; ++}; ++ ++ ++} // imap ++} // net ++} // vmime ++ ++ ++#endif // VMIME_NET_IMAP_IMAPMESSAGEPARTCONTENTHANDLER_HPP_INCLUDED ++ +diff --git a/vmime/net/imap/IMAPPart.hpp b/vmime/net/imap/IMAPPart.hpp +new file mode 100644 +index 0000000..d84db1b +--- /dev/null ++++ b/vmime/net/imap/IMAPPart.hpp +@@ -0,0 +1,88 @@ ++// ++// VMime library (http://www.vmime.org) ++// Copyright (C) 2002-2009 Vincent Richard ++// ++// 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 3 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-1301 USA. ++// ++// 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 cover the whole combination. ++// ++ ++#ifndef VMIME_NET_IMAP_IMAPPART_HPP_INCLUDED ++#define VMIME_NET_IMAP_IMAPPART_HPP_INCLUDED ++ ++ ++#include "vmime/net/message.hpp" ++ ++#include "vmime/net/imap/IMAPParser.hpp" ++ ++ ++namespace vmime { ++namespace net { ++namespace imap { ++ ++ ++class IMAPStructure; ++ ++ ++class IMAPPart : public part ++{ ++private: ++ ++ friend class vmime::creator; ++ ++ IMAPPart(ref parent, const int number, const IMAPParser::body_type_mpart* mpart); ++ IMAPPart(ref parent, const int number, const IMAPParser::body_type_1part* part); ++ ++public: ++ ++ ref getStructure() const; ++ ref getStructure(); ++ ++ ref getParent() const; ++ ++ const mediaType& getType() const; ++ int getSize() const; ++ int getNumber() const; ++ ++ ref getHeader() const; ++ ++ ++ static ref create ++ (ref parent, const int number, const IMAPParser::body* body); ++ ++ ++ header& getOrCreateHeader(); ++ ++private: ++ ++ ref m_structure; ++ weak_ref m_parent; ++ ref
m_header; ++ ++ int m_number; ++ int m_size; ++ mediaType m_mediaType; ++}; ++ ++ ++} // imap ++} // net ++} // vmime ++ ++ ++#endif // VMIME_NET_IMAP_IMAPPART_HPP_INCLUDED ++ +diff --git a/vmime/net/imap/IMAPStructure.hpp b/vmime/net/imap/IMAPStructure.hpp +new file mode 100644 +index 0000000..e43676c +--- /dev/null ++++ b/vmime/net/imap/IMAPStructure.hpp +@@ -0,0 +1,67 @@ ++// ++// VMime library (http://www.vmime.org) ++// Copyright (C) 2002-2009 Vincent Richard ++// ++// 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 3 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-1301 USA. ++// ++// 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 cover the whole combination. ++// ++ ++#ifndef VMIME_NET_IMAP_IMAPSTRUCTURE_HPP_INCLUDED ++#define VMIME_NET_IMAP_IMAPSTRUCTURE_HPP_INCLUDED ++ ++ ++#include "vmime/net/message.hpp" ++ ++#include "vmime/net/imap/IMAPParser.hpp" ++ ++ ++namespace vmime { ++namespace net { ++namespace imap { ++ ++ ++class IMAPPart; ++ ++ ++class IMAPStructure : public structure ++{ ++public: ++ ++ IMAPStructure(); ++ IMAPStructure(const IMAPParser::body* body); ++ IMAPStructure(ref parent, const std::vector & list); ++ ++ ref getPartAt(const int x) const; ++ ref getPartAt(const int x); ++ int getPartCount() const; ++ ++ static ref emptyStructure(); ++ ++private: ++ ++ std::vector > m_parts; ++}; ++ ++ ++} // imap ++} // net ++} // vmime ++ ++ ++#endif // VMIME_NET_IMAP_IMAPSTRUCTURE_HPP_INCLUDED ++ +diff --git a/vmime/net/maildir/maildirMessage.hpp b/vmime/net/maildir/maildirMessage.hpp +index ba3c88e..cd66d43 100644 +--- a/vmime/net/maildir/maildirMessage.hpp ++++ b/vmime/net/maildir/maildirMessage.hpp +@@ -75,6 +75,8 @@ public: + + void fetchPartHeader(ref p); + ++ ref getParsedMessage(); ++ + private: + + void fetch(ref folder, const int options); +diff --git a/vmime/net/message.hpp b/vmime/net/message.hpp +index a0cc1da..b6ebef8 100644 +--- a/vmime/net/message.hpp ++++ b/vmime/net/message.hpp +@@ -31,6 +31,8 @@ + #include "vmime/utility/progressListener.hpp" + #include "vmime/utility/stream.hpp" + ++#include "vmime/message.hpp" ++ + + namespace vmime { + namespace net { +@@ -286,6 +288,16 @@ public: + * @param p the part for which to fetch the header + */ + virtual void fetchPartHeader(ref p) = 0; ++ ++ /** Get the RFC-822 message for this abstract message. ++ * Warning: This may require getting some data (ie: structure and headers) from ++ * the server, which is done automatically. Actual message contents (ie: body) ++ * will not be fetched if possible (IMAP allows it, whereas POP3 will require ++ * to fetch the whole message). ++ * ++ * @return a RFC-822-parsed message ++ */ ++ virtual ref getParsedMessage() = 0; + }; + + +diff --git a/vmime/net/pop3/POP3Message.hpp b/vmime/net/pop3/POP3Message.hpp +index 5dbea3f..337cc5d 100644 +--- a/vmime/net/pop3/POP3Message.hpp ++++ b/vmime/net/pop3/POP3Message.hpp +@@ -77,6 +77,8 @@ public: + + void fetchPartHeader(ref p); + ++ ref getParsedMessage(); ++ + private: + + void fetch(ref folder, const int options); + +commit 6a967daa852e3ef6f277e8bbcf50e07770d04661 +Author: vincent-richard +Date: Thu May 20 09:57:51 2010 +0000 + + Fixed type size. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@548 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/security/digest/sha1/sha1MessageDigest.cpp b/src/security/digest/sha1/sha1MessageDigest.cpp +index 6d99e3f..e4bcea4 100644 +--- a/src/security/digest/sha1/sha1MessageDigest.cpp ++++ b/src/security/digest/sha1/sha1MessageDigest.cpp +@@ -135,7 +135,7 @@ void sha1MessageDigest::update(const byte_t* buffer, const unsigned long len) + + void sha1MessageDigest::finalize() + { +- unsigned long i, j; ++ unsigned int i, j; + unsigned char finalcount[8]; + + for (i = 0 ; i < 8 ; i++) +@@ -162,8 +162,8 @@ void sha1MessageDigest::finalize() + i = j = 0; + + std::memset(m_buffer, 0, 64); +- std::memset(m_state, 0, 5 * sizeof(unsigned long)); +- std::memset(m_count, 0, 2 * sizeof(unsigned long)); ++ std::memset(m_state, 0, 5 * sizeof(unsigned int)); ++ std::memset(m_count, 0, 2 * sizeof(unsigned int)); + std::memset(&finalcount, 0, 8); + } + +@@ -192,17 +192,17 @@ void sha1MessageDigest::finalize(const byte_t* buffer, + * This is the core of the algorithm. + */ + void sha1MessageDigest::transform +- (unsigned long state[5], const unsigned char buffer[64]) ++ (unsigned int state[5], const unsigned char buffer[64]) + { +- unsigned long a, b, c, d, e; ++ unsigned int a, b, c, d, e; + + typedef union + { + unsigned char c[64]; +- unsigned long l[16]; ++ unsigned int l[16]; + } CHAR64LONG16; + +- assert(sizeof(unsigned long) == 4); ++ assert(sizeof(unsigned int) == 4); + + CHAR64LONG16* block; + static unsigned char workspace[64]; +diff --git a/vmime/security/digest/sha1/sha1MessageDigest.hpp b/vmime/security/digest/sha1/sha1MessageDigest.hpp +index 906009a..c8da349 100644 +--- a/vmime/security/digest/sha1/sha1MessageDigest.hpp ++++ b/vmime/security/digest/sha1/sha1MessageDigest.hpp +@@ -59,10 +59,10 @@ protected: + + void init(); + +- static void transform(unsigned long state[5], const byte_t buffer[64]); ++ static void transform(unsigned int state[5], const byte_t buffer[64]); + +- unsigned long m_state[5]; +- unsigned long m_count[2]; ++ unsigned int m_state[5]; ++ unsigned int m_count[2]; + byte_t m_buffer[64]; + + byte_t m_digest[20]; + +commit 90f9e6fb020975996377f09e0569a17b8feaaf71 +Author: vincent-richard +Date: Thu May 20 10:00:19 2010 +0000 + + Fixed unit tests build on OSX. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@549 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/SConstruct b/SConstruct +index 99b2190..fb01edf 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -962,6 +962,10 @@ if env['build_tests'] == 'yes': + env = env.Clone() + env.Append(LIBS = ['cppunit', 'dl', packageVersionedGenericName + '-debug', 'pthread']) + env.Append(LIBPATH=['.']) ++ ++ if sys.platform == "mac" or sys.platform == "darwin": ++ env.Append(LIBS = ['iconv', 'gcrypt']) ++ + Default( + env.Program( + target = 'run-tests', + +commit 8bdccea503ad998f029a13e3963877c416a6bc0c +Author: vincent-richard +Date: Thu May 20 15:28:51 2010 +0000 + + Fixed case-sensitive include. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@550 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/imap/IMAPMessagePartContentHandler.cpp b/src/net/imap/IMAPMessagePartContentHandler.cpp +index 12d387c..a226b68 100644 +--- a/src/net/imap/IMAPMessagePartContentHandler.cpp ++++ b/src/net/imap/IMAPMessagePartContentHandler.cpp +@@ -21,7 +21,7 @@ + // the GNU General Public License cover the whole combination. + // + +-#include "vmime/net/imap/imapmessagepartcontenthandler.hpp" ++#include "vmime/net/imap/IMAPMessagePartContentHandler.hpp" + + + namespace vmime { + +commit ab5050b777359913f1e73b396dcc44da71870b29 +Author: vincent-richard +Date: Fri May 21 06:01:33 2010 +0000 + + Fixed missing #include. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@551 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/tls/TLSSession.cpp b/src/net/tls/TLSSession.cpp +index d4eab3e..cb5351a 100644 +--- a/src/net/tls/TLSSession.cpp ++++ b/src/net/tls/TLSSession.cpp +@@ -27,6 +27,7 @@ + #include "vmime/config.hpp" + + #if VMIME_HAVE_PTHREAD ++# include + # include + # include + #endif // VMIME_HAVE_PTHREAD + +commit bb65b540ddce6793cfb1d16bb3c07730ccd7a791 +Author: vincent-richard +Date: Fri May 21 07:41:15 2010 +0000 + + Always encode special charsets. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@552 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/utility/stringUtils.cpp b/src/utility/stringUtils.cpp +index abae8f9..7f61a7d 100644 +--- a/src/utility/stringUtils.cpp ++++ b/src/utility/stringUtils.cpp +@@ -151,6 +151,24 @@ string::size_type stringUtils::countASCIIchars + } + + ++string::size_type stringUtils::findFirstNonASCIIchar ++ (const string::const_iterator begin, const string::const_iterator end) ++{ ++ string::size_type pos = string::npos; ++ ++ for (string::const_iterator i = begin ; i != end ; ++i) ++ { ++ if (!parserHelpers::isAscii(*i)) ++ { ++ pos = i - begin; ++ break; ++ } ++ } ++ ++ return pos; ++} ++ ++ + const string stringUtils::unquote(const string& str) + { + if (str.length() < 2) +diff --git a/src/word.cpp b/src/word.cpp +index 667f1fb..9d0177f 100644 +--- a/src/word.cpp ++++ b/src/word.cpp +@@ -336,30 +336,22 @@ void word::generate(utility::outputStream& os, const string::size_type maxLineLe + if (state == NULL) + state = &defaultGeneratorState; + +- // Calculate the number of ASCII chars to check whether encoding is needed +- // and _which_ encoding to use. +- const string::size_type asciiCount = +- utility::stringUtils::countASCIIchars(m_buffer.begin(), m_buffer.end()); ++ // Find out if encoding is forced or required by contents + charset ++ bool encodingNeeded = (flags & text::FORCE_ENCODING) != 0; + +- bool noEncoding = (flags & text::FORCE_NO_ENCODING) || +- (!(flags & text::FORCE_ENCODING) && asciiCount == m_buffer.length()); +- +- if (!(flags & text::FORCE_NO_ENCODING) && +- m_buffer.find_first_of("\n\r") != string::npos) +- { +- // Force encoding when there are only ASCII chars, but there is +- // also at least one of '\n' or '\r' (header fields) +- noEncoding = false; +- } ++ if (encodingNeeded == false) ++ encodingNeeded = wordEncoder::isEncodingNeeded(m_buffer, m_charset); ++ else if ((flags & text::FORCE_NO_ENCODING) != 0) ++ encodingNeeded = false; + + // If possible and requested (with flag), quote the buffer (no folding is performed). + // Quoting is possible if and only if: +- // - the whole buffer is ASCII-only ++ // - the buffer does not need to be encoded + // - the buffer does not contain quoting character (") + // - there is enough remaining space on the current line to hold the whole buffer +- if (!noEncoding && ++ if (!encodingNeeded && + (flags & text::QUOTE_IF_POSSIBLE) && +- asciiCount == m_buffer.length() && ++ !encodingNeeded && + m_buffer.find('"') == string::npos && + (curLineLength + 2 /* 2 x " */ + m_buffer.length()) < maxLineLength) + { +@@ -367,7 +359,7 @@ void word::generate(utility::outputStream& os, const string::size_type maxLineLe + curLineLength += 2 + m_buffer.length(); + } + // We will fold lines without encoding them. +- else if (noEncoding) ++ else if (!encodingNeeded) + { + string::const_iterator lastWSpos = m_buffer.end(); // last white-space position + string::const_iterator curLineStart = m_buffer.begin(); // current line start +diff --git a/src/wordEncoder.cpp b/src/wordEncoder.cpp +index 154b4ef..cc8292f 100644 +--- a/src/wordEncoder.cpp ++++ b/src/wordEncoder.cpp +@@ -260,17 +260,75 @@ wordEncoder::Encoding wordEncoder::getEncoding() const + } + + ++// Explicitly force encoding for some charsets ++struct CharsetEncodingEntry ++{ ++ CharsetEncodingEntry(const std::string& charset_, const wordEncoder::Encoding encoding_) ++ : charset(charset_), encoding(encoding_) ++ { ++ } ++ ++ std::string charset; ++ wordEncoder::Encoding encoding; ++}; ++ ++CharsetEncodingEntry g_charsetEncodingMap[] = ++{ ++ // Use QP encoding for ISO-8859-x charsets ++ CharsetEncodingEntry("iso-8859", wordEncoder::ENCODING_QP), ++ CharsetEncodingEntry("iso8859", wordEncoder::ENCODING_QP), ++ ++ // RFC-1468 states: ++ // " ISO-2022-JP may also be used in MIME Part 2 headers. The "B" ++ // encoding should be used with ISO-2022-JP text. " ++ // Use Base64 encoding for all ISO-2022 charsets. ++ CharsetEncodingEntry("iso-2022", wordEncoder::ENCODING_B64), ++ CharsetEncodingEntry("iso2022", wordEncoder::ENCODING_B64), ++ ++ // Last entry is not used ++ CharsetEncodingEntry("", wordEncoder::ENCODING_AUTO) ++}; ++ ++ ++// static ++bool wordEncoder::isEncodingNeeded(const string& buffer, const charset& charset) ++{ ++ // Special treatment for some charsets ++ const string cset = utility::stringUtils::toLower(charset.getName()); ++ ++ for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) ++ { ++ if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) ++ { ++ if (g_charsetEncodingMap[i].encoding != wordEncoder::ENCODING_AUTO) ++ return true; ++ } ++ } ++ ++ // No encoding is needed if the buffer only contains ASCII chars ++ if (utility::stringUtils::findFirstNonASCIIchar(buffer.begin(), buffer.end()) != string::npos) ++ return true; ++ ++ // Force encoding when there are only ASCII chars, but there is ++ // also at least one of '\n' or '\r' (header fields) ++ if (buffer.find_first_of("\n\r") != string::npos) ++ return true; ++ ++ return false; ++} ++ ++ + // static + wordEncoder::Encoding wordEncoder::guessBestEncoding + (const string& buffer, const charset& charset) + { +- // If the charset is ISO-8859-x, set to QP encoding ++ // Special treatment for some charsets + const string cset = utility::stringUtils::toLower(charset.getName()); + +- if (cset.find("iso-8859") != string::npos || +- cset.find("iso8859") != string::npos) ++ for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) + { +- return ENCODING_QP; ++ if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) ++ return g_charsetEncodingMap[i].encoding; + } + + // Use Base64 if more than 40% non-ASCII, or Quoted-Printable else (default) +diff --git a/tests/parser/textTest.cpp b/tests/parser/textTest.cpp +index 5c9b521..4a7e394 100644 +--- a/tests/parser/textTest.cpp ++++ b/tests/parser/textTest.cpp +@@ -44,6 +44,8 @@ VMIME_TEST_SUITE_BEGIN + VMIME_TEST(testWordGenerateSpace) + VMIME_TEST(testWordGenerateSpace2) + VMIME_TEST(testWordGenerateMultiBytes) ++ VMIME_TEST(testWordGenerateQuote) ++ VMIME_TEST(testWordGenerateSpecialCharsets) + VMIME_TEST_LIST_END + + +@@ -335,9 +337,38 @@ VMIME_TEST_SUITE_BEGIN + VASSERT_EQ("1", "=?utf-8?Q?aaa?==?utf-8?Q?=C3=A9?==?utf-8?Q?zzz?=", + cleanGeneratedWords(vmime::word("aaa\xc3\xa9zzz", vmime::charset("utf-8")).generate(16))); + +- VASSERT_EQ("1", "=?utf-8?Q?aaa=C3=A9?==?utf-8?Q?zzz?=", ++ VASSERT_EQ("2", "=?utf-8?Q?aaa=C3=A9?==?utf-8?Q?zzz?=", + cleanGeneratedWords(vmime::word("aaa\xc3\xa9zzz", vmime::charset("utf-8")).generate(17))); + } + ++ void testWordGenerateQuote() ++ { ++ std::string str; ++ vmime::utility::outputStreamStringAdapter os(str); ++ ++ // ASCII-only text is quotable ++ str.clear(); ++ vmime::word("Quoted text").generate(os, 1000, 0, NULL, vmime::text::QUOTE_IF_POSSIBLE, NULL); ++ VASSERT_EQ("1", "\"Quoted text\"", cleanGeneratedWords(str)); ++ ++ // Text with CR/LF is not quotable ++ str.clear(); ++ vmime::word("Non-quotable\ntext", "us-ascii").generate(os, 1000, 0, NULL, vmime::text::QUOTE_IF_POSSIBLE, NULL); ++ VASSERT_EQ("2", "=?us-ascii?Q?Non-quotable=0Atext?=", cleanGeneratedWords(str)); ++ ++ // Text with non-ASCII chars is not quotable ++ str.clear(); ++ vmime::word("Non-quotable text \xc3\xa9").generate(os, 1000, 0, NULL, vmime::text::QUOTE_IF_POSSIBLE, NULL); ++ VASSERT_EQ("3", "=?UTF-8?Q?Non-quotable_text_=C3=A9?=", cleanGeneratedWords(str)); ++ } ++ ++ void testWordGenerateSpecialCharsets() ++ { ++ // ISO-2022-JP only uses 7-bit chars but should be encoded in Base64 ++ VASSERT_EQ("1", "=?iso-2022-jp?B?XlskQiVRITwlPSVKJWshJiU9JVUlSCUmJSclIl5bKEI=?=", ++ cleanGeneratedWords(vmime::word("^[$B%Q!<%=%J%k!&%=%U%H%&%'%\"^[(B", ++ vmime::charset("iso-2022-jp")).generate(100))); ++ } ++ + VMIME_TEST_SUITE_END + +diff --git a/vmime/utility/stringUtils.hpp b/vmime/utility/stringUtils.hpp +index b6589db..a8270d3 100644 +--- a/vmime/utility/stringUtils.hpp ++++ b/vmime/utility/stringUtils.hpp +@@ -104,6 +104,14 @@ public: + */ + static string::size_type countASCIIchars(const string::const_iterator begin, const string::const_iterator end); + ++ /** Returns the position of the first non 7-bit US-ASCII character in a string. ++ * ++ * @param begin start position ++ * @param end end position ++ * @return position since begin, or string::npos ++ */ ++ static string::size_type findFirstNonASCIIchar(const string::const_iterator begin, const string::const_iterator end); ++ + /** Convert the specified value to a string value. + * + * @param value to convert +diff --git a/vmime/wordEncoder.hpp b/vmime/wordEncoder.hpp +index 17ca808..1a492ea 100644 +--- a/vmime/wordEncoder.hpp ++++ b/vmime/wordEncoder.hpp +@@ -73,12 +73,23 @@ public: + */ + Encoding getEncoding() const; + +-private: ++ /** Test whether RFC-2047 encoding is needed. ++ * ++ * @param buffer buffer to analyze ++ * @param charset charset of the buffer ++ * @return true if encoding is needed, false otherwise. ++ */ ++ static bool isEncodingNeeded(const string& buffer, const charset& charset); + ++ /** Guess the best RFC-2047 encoding to use for the specified buffer. ++ * ++ * @param buffer buffer to analyze ++ * @param charset charset of the buffer ++ * @return RFC-2047 encoding ++ */ + static Encoding guessBestEncoding(const string& buffer, const charset& charset); + +- void guessBestEncoding(); +- ++private: + + string m_buffer; + string::size_type m_pos; + +commit 2c3a4bcc74a56df6362657cb8fad4ab21bde287c +Author: vincent-richard +Date: Fri May 21 09:32:42 2010 +0000 + + Rewritten doc. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@553 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/vmime/component.hpp b/vmime/component.hpp +index f30a76c..b38127f 100644 +--- a/vmime/component.hpp ++++ b/vmime/component.hpp +@@ -32,8 +32,8 @@ namespace vmime + { + + +-/** This abstract class is the base for all the classes in the library. +- * It defines the methods for parsing and generating all the components. ++/** This abstract class is the base class for all the components of a message. ++ * It defines methods for parsing and generating a component. + */ + + class component : public object + +commit 36aed261bed5604ce6ed4b39c3938db8712b2004 +Author: vincent-richard +Date: Sun May 23 16:14:41 2010 +0000 + + FileSystemFactory is now a ref. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@554 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/examples/example3.cpp b/examples/example3.cpp +index cb3e6ae..4fa482d 100644 +--- a/examples/example3.cpp ++++ b/examples/example3.cpp +@@ -73,7 +73,7 @@ int main() + + // -- embed an image (the returned "CID" (content identifier) is used to reference + // -- the image into HTML content). +- vmime::utility::fileSystemFactory* fs = ++ vmime::ref fs = + vmime::platform::getHandler()->getFileSystemFactory(); + + vmime::ref imageFile = + +commit e959b4b3c3ff5228b33dc74c6f6305eeadc1f068 +Author: vincent-richard +Date: Sun May 23 16:18:00 2010 +0000 + + Improved automatic encoding selection. Added helper functions on body for setting contents, type, charset and encoding. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@555 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/body.cpp b/src/body.cpp +index 3f5ff0f..13dff6b 100644 +--- a/src/body.cpp ++++ b/src/body.cpp +@@ -213,8 +213,26 @@ void body::parse(const string& buffer, const string::size_type position, + // Treat the contents as 'simple' data + else + { ++ encoding enc; ++ ++ try ++ { ++ const ref cef = ++ m_header.acquire()->findField(fields::CONTENT_TRANSFER_ENCODING); ++ ++ enc = *cef->getValue().dynamicCast (); ++ } ++ catch (exceptions::no_such_field&) ++ { ++ // Defaults to "7bit" (RFC-1521) ++ enc = vmime::encoding(encodingTypes::SEVEN_BIT); ++ ++ // Set header field ++ m_header.acquire()->ContentTransferEncoding()->setValue(enc); ++ } ++ + // Extract the (encoded) contents +- m_contents = vmime::create (buffer, position, end, getEncoding()); ++ m_contents = vmime::create (buffer, position, end, enc); + } + + setParsedBounds(position, end); +@@ -406,6 +424,22 @@ bool body::isValidBoundary(const string& boundary) + // Quick-access functions + // + ++ ++void body::setContentType(const mediaType& type, const charset& chset) ++{ ++ ref ctf = m_header.acquire()->ContentType().dynamicCast (); ++ ++ ctf->setValue(type); ++ ctf->setCharset(chset); ++} ++ ++ ++void body::setContentType(const mediaType& type) ++{ ++ m_header.acquire()->ContentType()->setValue(type); ++} ++ ++ + const mediaType body::getContentType() const + { + try +@@ -423,6 +457,25 @@ const mediaType body::getContentType() const + } + + ++void body::setCharset(const charset& chset) ++{ ++ // If a Content-Type field exists, set charset ++ try ++ { ++ ref ctf = ++ m_header.acquire()->findField(fields::CONTENT_TYPE).dynamicCast (); ++ ++ ctf->setCharset(chset); ++ } ++ // Else, create a new Content-Type field of default type "text/plain" ++ // and set charset on it ++ catch (exceptions::no_such_field&) ++ { ++ setContentType(mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN), chset); ++ } ++} ++ ++ + const charset body::getCharset() const + { + try +@@ -445,6 +498,12 @@ const charset body::getCharset() const + } + + ++void body::setEncoding(const encoding& enc) ++{ ++ m_header.acquire()->ContentTransferEncoding()->setValue(enc); ++} ++ ++ + const encoding body::getEncoding() const + { + try +@@ -456,8 +515,15 @@ const encoding body::getEncoding() const + } + catch (exceptions::no_such_field&) + { +- // Defaults to "7bit" (RFC-1521) +- return (vmime::encoding(encodingTypes::SEVEN_BIT)); ++ if (m_contents->isEncoded()) ++ { ++ return m_contents->getEncoding(); ++ } ++ else ++ { ++ // Defaults to "7bit" (RFC-1521) ++ return vmime::encoding(encodingTypes::SEVEN_BIT); ++ } + } + } + +@@ -551,6 +617,32 @@ void body::setContents(ref contents) + } + + ++void body::setContents(ref contents, const mediaType& type) ++{ ++ m_contents = contents; ++ ++ setContentType(type); ++} ++ ++ ++void body::setContents(ref contents, const mediaType& type, const charset& chset) ++{ ++ m_contents = contents; ++ ++ setContentType(type, chset); ++} ++ ++ ++void body::setContents(ref contents, const mediaType& type, ++ const charset& chset, const encoding& enc) ++{ ++ m_contents = contents; ++ ++ setContentType(type, chset); ++ setEncoding(enc); ++} ++ ++ + void body::initNewPart(ref part) + { + part->m_parent = m_part; +diff --git a/src/charset.cpp b/src/charset.cpp +index e3c11da..e043186 100644 +--- a/src/charset.cpp ++++ b/src/charset.cpp +@@ -24,6 +24,7 @@ + #include "vmime/charset.hpp" + #include "vmime/exception.hpp" + #include "vmime/platform.hpp" ++#include "vmime/encoding.hpp" + + #include "vmime/utility/stringUtils.hpp" + +@@ -140,4 +141,53 @@ const std::vector > charset::getChildComponents() const + } + + ++ ++// Explicitly force encoding for some charsets ++struct CharsetEncodingEntry ++{ ++ CharsetEncodingEntry(const string& charset_, const string& encoding_) ++ : charset(charset_), encoding(encoding_) ++ { ++ } ++ ++ const string charset; ++ const string encoding; ++}; ++ ++CharsetEncodingEntry g_charsetEncodingMap[] = ++{ ++ // Use QP encoding for ISO-8859-x charsets ++ CharsetEncodingEntry("iso-8859", encodingTypes::QUOTED_PRINTABLE), ++ CharsetEncodingEntry("iso8859", encodingTypes::QUOTED_PRINTABLE), ++ ++ // RFC-1468 states: ++ // " ISO-2022-JP may also be used in MIME Part 2 headers. The "B" ++ // encoding should be used with ISO-2022-JP text. " ++ // Use Base64 encoding for all ISO-2022 charsets. ++ CharsetEncodingEntry("iso-2022", encodingTypes::BASE64), ++ CharsetEncodingEntry("iso2022", encodingTypes::BASE64), ++ ++ // Last entry is not used ++ CharsetEncodingEntry("", "") ++}; ++ ++ ++bool charset::getRecommendedEncoding(encoding& enc) const ++{ ++ // Special treatment for some charsets ++ const string cset = utility::stringUtils::toLower(getName()); ++ ++ for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) ++ { ++ if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) ++ { ++ enc = g_charsetEncodingMap[i].encoding; ++ return true; ++ } ++ } ++ ++ return false; ++} ++ ++ + } // vmime +diff --git a/src/emptyContentHandler.cpp b/src/emptyContentHandler.cpp +index 5245341..48dc351 100644 +--- a/src/emptyContentHandler.cpp ++++ b/src/emptyContentHandler.cpp +@@ -96,4 +96,10 @@ const vmime::encoding& emptyContentHandler::getEncoding() const + } + + ++bool emptyContentHandler::isBuffered() const ++{ ++ return true; ++} ++ ++ + } // vmime +diff --git a/src/encoding.cpp b/src/encoding.cpp +index 58ce71d..0919d44 100644 +--- a/src/encoding.cpp ++++ b/src/encoding.cpp +@@ -110,7 +110,7 @@ bool encoding::operator!=(const encoding& value) const + } + + +-const encoding encoding::decide ++const encoding encoding::decideImpl + (const string::const_iterator begin, const string::const_iterator end) + { + const string::difference_type length = end - begin; +@@ -164,10 +164,40 @@ const encoding encoding::decide + } + + +-const encoding encoding::decide(ref /* data */) ++const encoding encoding::decide ++ (ref data, const EncodingUsage usage) + { +- // TODO: a better solution to do that? +- return (encoding(encodingTypes::BASE64)); ++ if (usage == USAGE_TEXT && data->isBuffered() && ++ data->getLength() > 0 && data->getLength() < 32768) ++ { ++ // Extract data into temporary buffer ++ string buffer; ++ utility::outputStreamStringAdapter os(buffer); ++ ++ data->extract(os); ++ os.flush(); ++ ++ return decideImpl(buffer.begin(), buffer.end()); ++ } ++ else ++ { ++ return encoding(encodingTypes::BASE64); ++ } ++} ++ ++ ++const encoding encoding::decide(ref data, ++ const charset& chset, const EncodingUsage usage) ++{ ++ if (usage == USAGE_TEXT) ++ { ++ encoding recEncoding; ++ ++ if (chset.getRecommendedEncoding(recEncoding)) ++ return recEncoding; ++ } ++ ++ return decide(data, usage); + } + + +diff --git a/src/htmlTextPart.cpp b/src/htmlTextPart.cpp +index 7713034..c845b57 100644 +--- a/src/htmlTextPart.cpp ++++ b/src/htmlTextPart.cpp +@@ -69,27 +69,20 @@ void htmlTextPart::generateIn(ref /* message */, ref paren + ref part = vmime::create (); + parent->getBody()->appendPart(part); + +- // -- Set header fields +- part->getHeader()->ContentType()->setValue +- (mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN)); +- part->getHeader()->ContentType().dynamicCast ()->setCharset(m_charset); +- part->getHeader()->ContentTransferEncoding()->setValue(encoding(encodingTypes::QUOTED_PRINTABLE)); +- + // -- Set contents +- part->getBody()->setContents(m_plainText); ++ part->getBody()->setContents(m_plainText, ++ mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN), m_charset, ++ encoding::decide(m_plainText, m_charset, encoding::USAGE_TEXT)); + } + + // HTML text + // -- Create a new part + ref htmlPart = vmime::create (); + +- // -- Set header fields +- htmlPart->getHeader()->ContentType()->setValue(mediaType(mediaTypes::TEXT, mediaTypes::TEXT_HTML)); +- htmlPart->getHeader()->ContentType().dynamicCast ()->setCharset(m_charset); +- htmlPart->getHeader()->ContentTransferEncoding()->setValue(encoding(encodingTypes::QUOTED_PRINTABLE)); +- + // -- Set contents +- htmlPart->getBody()->setContents(m_text); ++ htmlPart->getBody()->setContents(m_text, ++ mediaType(mediaTypes::TEXT, mediaTypes::TEXT_HTML), m_charset, ++ encoding::decide(m_text, m_charset, encoding::USAGE_TEXT)); + + // Handle the case we have embedded objects + if (!m_objects.empty()) +diff --git a/src/net/imap/IMAPMessagePartContentHandler.cpp b/src/net/imap/IMAPMessagePartContentHandler.cpp +index a226b68..4e6ba97 100644 +--- a/src/net/imap/IMAPMessagePartContentHandler.cpp ++++ b/src/net/imap/IMAPMessagePartContentHandler.cpp +@@ -173,6 +173,12 @@ bool IMAPMessagePartContentHandler::isEmpty() const + } + + ++bool IMAPMessagePartContentHandler::isBuffered() const ++{ ++ return true; ++} ++ ++ + } // imap + } // net + } // vmime +diff --git a/src/plainTextPart.cpp b/src/plainTextPart.cpp +index 7a674e7..15bcb5e 100644 +--- a/src/plainTextPart.cpp ++++ b/src/plainTextPart.cpp +@@ -63,13 +63,10 @@ void plainTextPart::generateIn(ref /* message */, ref pare + ref part = vmime::create (); + parent->getBody()->appendPart(part); + +- // Set header fields +- part->getHeader()->ContentType()->setValue(mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN)); +- part->getHeader()->ContentType().dynamicCast ()->setCharset(m_charset); +- part->getHeader()->ContentTransferEncoding()->setValue(encoding(encodingTypes::QUOTED_PRINTABLE)); +- + // Set contents +- part->getBody()->setContents(m_text); ++ part->getBody()->setContents(m_text, ++ mediaType(mediaTypes::TEXT, mediaTypes::TEXT_PLAIN), m_charset, ++ encoding::decide(m_text, m_charset, encoding::USAGE_TEXT)); + } + + +diff --git a/src/streamContentHandler.cpp b/src/streamContentHandler.cpp +index 9edf4aa..2ebd073 100644 +--- a/src/streamContentHandler.cpp ++++ b/src/streamContentHandler.cpp +@@ -201,4 +201,11 @@ const vmime::encoding& streamContentHandler::getEncoding() const + } + + ++bool streamContentHandler::isBuffered() const ++{ ++ // FIXME: some streams can be resetted ++ return false; ++} ++ ++ + } // vmime +diff --git a/src/stringContentHandler.cpp b/src/stringContentHandler.cpp +index 248fca4..4e85a6c 100644 +--- a/src/stringContentHandler.cpp ++++ b/src/stringContentHandler.cpp +@@ -202,4 +202,10 @@ const vmime::encoding& stringContentHandler::getEncoding() const + } + + ++bool stringContentHandler::isBuffered() const ++{ ++ return true; ++} ++ ++ + } // vmime +diff --git a/src/wordEncoder.cpp b/src/wordEncoder.cpp +index cc8292f..22994ed 100644 +--- a/src/wordEncoder.cpp ++++ b/src/wordEncoder.cpp +@@ -26,6 +26,8 @@ + #include "vmime/exception.hpp" + #include "vmime/charsetConverter.hpp" + ++#include "vmime/encoding.hpp" ++ + #include "vmime/utility/encoder/b64Encoder.hpp" + #include "vmime/utility/encoder/qpEncoder.hpp" + +@@ -260,50 +262,14 @@ wordEncoder::Encoding wordEncoder::getEncoding() const + } + + +-// Explicitly force encoding for some charsets +-struct CharsetEncodingEntry +-{ +- CharsetEncodingEntry(const std::string& charset_, const wordEncoder::Encoding encoding_) +- : charset(charset_), encoding(encoding_) +- { +- } +- +- std::string charset; +- wordEncoder::Encoding encoding; +-}; +- +-CharsetEncodingEntry g_charsetEncodingMap[] = +-{ +- // Use QP encoding for ISO-8859-x charsets +- CharsetEncodingEntry("iso-8859", wordEncoder::ENCODING_QP), +- CharsetEncodingEntry("iso8859", wordEncoder::ENCODING_QP), +- +- // RFC-1468 states: +- // " ISO-2022-JP may also be used in MIME Part 2 headers. The "B" +- // encoding should be used with ISO-2022-JP text. " +- // Use Base64 encoding for all ISO-2022 charsets. +- CharsetEncodingEntry("iso-2022", wordEncoder::ENCODING_B64), +- CharsetEncodingEntry("iso2022", wordEncoder::ENCODING_B64), +- +- // Last entry is not used +- CharsetEncodingEntry("", wordEncoder::ENCODING_AUTO) +-}; +- +- + // static + bool wordEncoder::isEncodingNeeded(const string& buffer, const charset& charset) + { +- // Special treatment for some charsets +- const string cset = utility::stringUtils::toLower(charset.getName()); ++ // Charset-specific encoding ++ encoding recEncoding; + +- for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) +- { +- if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) +- { +- if (g_charsetEncodingMap[i].encoding != wordEncoder::ENCODING_AUTO) +- return true; +- } +- } ++ if (charset.getRecommendedEncoding(recEncoding)) ++ return true; + + // No encoding is needed if the buffer only contains ASCII chars + if (utility::stringUtils::findFirstNonASCIIchar(buffer.begin(), buffer.end()) != string::npos) +@@ -322,13 +288,15 @@ bool wordEncoder::isEncodingNeeded(const string& buffer, const charset& charset) + wordEncoder::Encoding wordEncoder::guessBestEncoding + (const string& buffer, const charset& charset) + { +- // Special treatment for some charsets +- const string cset = utility::stringUtils::toLower(charset.getName()); ++ // Charset-specific encoding ++ encoding recEncoding; + +- for (unsigned int i = 0 ; i < (sizeof(g_charsetEncodingMap) / sizeof(g_charsetEncodingMap[0])) - 1 ; ++i) ++ if (charset.getRecommendedEncoding(recEncoding)) + { +- if (cset.find(g_charsetEncodingMap[i].charset) != string::npos) +- return g_charsetEncodingMap[i].encoding; ++ if (recEncoding == encoding(encodingTypes::QUOTED_PRINTABLE)) ++ return ENCODING_QP; ++ else ++ return ENCODING_B64; + } + + // Use Base64 if more than 40% non-ASCII, or Quoted-Printable else (default) +diff --git a/vmime/body.hpp b/vmime/body.hpp +index 80c1bb5..9e83d6b 100644 +--- a/vmime/body.hpp ++++ b/vmime/body.hpp +@@ -184,6 +184,45 @@ public: + */ + void setContents(ref contents); + ++ /** Set the body contents and type. ++ * ++ * @param contents new body contents ++ * @param type type of contents ++ */ ++ void setContents(ref contents, const mediaType& type); ++ ++ /** Set the body contents, type and charset. ++ * ++ * @param contents new body contents ++ * @param type type of contents ++ * @param charset charset of contents ++ */ ++ void setContents(ref contents, const mediaType& type, const charset& chset); ++ ++ /** Set the body contents, type, charset and encoding. ++ * ++ * @param contents new body contents ++ * @param type type of contents ++ * @param charset charset of contents ++ * @param encoding contents encoding ++ */ ++ void setContents(ref contents, const mediaType& type, ++ const charset& chset, const encoding& enc); ++ ++ /** Set the MIME type and charset of contents. ++ * If a charset is defined, it will not be modified. ++ * ++ * @param type MIME media type of contents ++ * @param chset charset of contents ++ */ ++ void setContentType(const mediaType& type, const charset& chset); ++ ++ /** Set the MIME type of contents. ++ * ++ * @param type MIME media type of contents ++ */ ++ void setContentType(const mediaType& type); ++ + /** Return the media type of the data contained in the body contents. + * This is a shortcut for getHeader()->ContentType()->getValue() + * on the parent part. +@@ -192,6 +231,13 @@ public: + */ + const mediaType getContentType() const; + ++ /** Set the charset of contents. ++ * If the type is not set, it will be set to default "text/plain" type. ++ * ++ * @param chset charset of contents ++ */ ++ void setCharset(const charset& chset); ++ + /** Return the charset of the data contained in the body contents. + * This is a shortcut for getHeader()->ContentType()->getCharset() + * on the parent part. +@@ -200,6 +246,13 @@ public: + */ + const charset getCharset() const; + ++ /** Set the output encoding of contents. ++ * Contents will be encoded (or re-encoded) when this node is being generated. ++ * ++ * @param enc encoding of contents ++ */ ++ void setEncoding(const encoding& enc); ++ + /** Return the encoding used to encode the body contents. + * This is a shortcut for getHeader()->ContentTransferEncoding()->getValue() + * on the parent part. +diff --git a/vmime/charset.hpp b/vmime/charset.hpp +index 1d25b74..b2e241c 100644 +--- a/vmime/charset.hpp ++++ b/vmime/charset.hpp +@@ -33,6 +33,9 @@ namespace vmime + { + + ++class encoding; // forward reference ++ ++ + /** Charset description (basic type). + */ + +@@ -59,6 +62,16 @@ public: + + const std::vector > getChildComponents() const; + ++ /** Gets the recommended encoding for this charset. ++ * Note: there may be no recommended encoding. ++ * ++ * @param enc output parameter that will hold recommended encoding ++ * @return true if an encoding is recommended (the encoding is stored ++ * in the enc parameter), false otherwise (in this case, the enc ++ * parameter is not modified) ++ */ ++ bool getRecommendedEncoding(encoding& enc) const; ++ + /** Returns the default charset used on the system. + * + * This function simply calls platformHandler::getLocaleCharset() +diff --git a/vmime/contentHandler.hpp b/vmime/contentHandler.hpp +index 38e4e24..0374cbe 100644 +--- a/vmime/contentHandler.hpp ++++ b/vmime/contentHandler.hpp +@@ -111,6 +111,13 @@ public: + * @return true if no data is managed by this object, false otherwise + */ + virtual bool isEmpty() const = 0; ++ ++ /** Indicates whether the extract() method can be called multiple times. ++ * ++ * @return true if the data can be extracted multiple times, or false ++ * if not (ie. streamed data from socket) ++ */ ++ virtual bool isBuffered() const = 0; + }; + + +diff --git a/vmime/emptyContentHandler.hpp b/vmime/emptyContentHandler.hpp +index 727c065..7b1e7eb 100644 +--- a/vmime/emptyContentHandler.hpp ++++ b/vmime/emptyContentHandler.hpp +@@ -52,6 +52,8 @@ public: + const vmime::encoding& getEncoding() const; + + bool isEmpty() const; ++ ++ bool isBuffered() const; + }; + + +diff --git a/vmime/encoding.hpp b/vmime/encoding.hpp +index fa72dfb..ba78081 100644 +--- a/vmime/encoding.hpp ++++ b/vmime/encoding.hpp +@@ -45,6 +45,13 @@ class encoding : public headerFieldValue + { + public: + ++ enum EncodingUsage ++ { ++ USAGE_TEXT, /**< Use for body text. */ ++ USAGE_BINARY_DATA /**< Use for attachment, image... */ ++ }; ++ ++ + encoding(); + explicit encoding(const string& name); + encoding(const encoding& enc); +@@ -75,20 +82,21 @@ public: + + /** Decide which encoding to use based on the specified data. + * +- * \deprecated Use the new decide() method which takes a contentHandler parameter. +- * +- * @param begin start iterator in buffer +- * @param end end iterator in buffer ++ * @param data data used to determine encoding ++ * @param usage context of use of data + * @return suitable encoding for specified data + */ +- static const encoding decide(const string::const_iterator begin, const string::const_iterator end); ++ static const encoding decide(ref data, const EncodingUsage usage = USAGE_BINARY_DATA); + +- /** Decide which encoding to use based on the specified data. ++ /** Decide which encoding to use based on the specified data and charset. + * + * @param data data used to determine encoding +- * @return suitable encoding for specified data ++ * @param charset charset of data ++ * @param usage context of use of data ++ * @return suitable encoding for specified data and charset + */ +- static const encoding decide(ref data); ++ static const encoding decide(ref data, const charset& chset, const EncodingUsage usage = USAGE_BINARY_DATA); ++ + + ref clone() const; + void copyFrom(const component& other); +@@ -106,6 +114,17 @@ private: + + string m_name; + ++ /** Decide which encoding to use based on the specified data. ++ * ++ * Please note: this will read the whole buffer, so it should be used only ++ * for small amount of data (eg. text), and not large binary attachments. ++ * ++ * @param begin start iterator in buffer ++ * @param end end iterator in buffer ++ * @return suitable encoding for specified data ++ */ ++ static const encoding decideImpl(const string::const_iterator begin, const string::const_iterator end); ++ + public: + + using component::parse; +diff --git a/vmime/net/imap/IMAPMessagePartContentHandler.hpp b/vmime/net/imap/IMAPMessagePartContentHandler.hpp +index 0c4641e..75a03af 100644 +--- a/vmime/net/imap/IMAPMessagePartContentHandler.hpp ++++ b/vmime/net/imap/IMAPMessagePartContentHandler.hpp +@@ -55,6 +55,8 @@ public: + + bool isEmpty() const; + ++ bool isBuffered() const; ++ + private: + + weak_ref m_message; +diff --git a/vmime/streamContentHandler.hpp b/vmime/streamContentHandler.hpp +index aa62b2f..703fb72 100644 +--- a/vmime/streamContentHandler.hpp ++++ b/vmime/streamContentHandler.hpp +@@ -62,6 +62,8 @@ public: + + bool isEmpty() const; + ++ bool isBuffered() const; ++ + private: + + // Equals to NO_ENCODING if data is not encoded, otherwise this +diff --git a/vmime/stringContentHandler.hpp b/vmime/stringContentHandler.hpp +index 8d36889..a73ae67 100644 +--- a/vmime/stringContentHandler.hpp ++++ b/vmime/stringContentHandler.hpp +@@ -80,6 +80,8 @@ public: + + bool isEmpty() const; + ++ bool isBuffered() const; ++ + private: + + // Equals to NO_ENCODING if data is not encoded, otherwise this + +commit 59511165232b856605940976978f977e439a476a +Author: vincent-richard +Date: Wed Jun 23 20:42:25 2010 +0000 + + Do not generate 7-bit value for parameter if RFC-2231 extended value is generated (thanks to Eugene A. Shatokhin). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@556 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/parameter.cpp b/src/parameter.cpp +index 6cd8d1f..53adaca 100644 +--- a/src/parameter.cpp ++++ b/src/parameter.cpp +@@ -257,11 +257,23 @@ void parameter::generate(utility::outputStream& os, const string::size_type maxL + + // For compatibility with implementations that do not understand RFC-2231, + // also generate a normal "7bit/us-ascii" parameter ++ ++ // [By Eugene A. Shatokhin] ++ // Note that if both the normal "7bit/us-ascii" value and the extended ++ // value are present, the latter can be ignored by mail processing systems. ++ // This may lead to annoying problems, for example, with strange names of ++ // attachments with all but 7-bit ascii characters removed, etc. To avoid ++ // this, I would suggest not to create "7bit/us-ascii" value if the extended ++ // value is to be generated. ++ ++ // A stream for a temporary storage ++ std::ostringstream sevenBitBuffer; ++ + string::size_type pos = curLinePos; + + if (pos + name.length() + 10 + value.length() > maxLineLength) + { +- os << NEW_LINE_SEQUENCE; ++ sevenBitBuffer << NEW_LINE_SEQUENCE; + pos = NEW_LINE_SEQUENCE_LENGTH; + } + +@@ -301,12 +313,12 @@ void parameter::generate(utility::outputStream& os, const string::size_type maxL + + if (needQuoting) + { +- os << name << "=\""; ++ sevenBitBuffer << name << "=\""; + pos += name.length() + 2; + } + else + { +- os << name << "="; ++ sevenBitBuffer << name << "="; + pos += name.length() + 1; + } + +@@ -318,12 +330,12 @@ void parameter::generate(utility::outputStream& os, const string::size_type maxL + + if (/* needQuoting && */ (c == '"' || c == '\\')) // 'needQuoting' is implicit + { +- os << '\\' << value[i]; // escape 'x' with '\x' ++ sevenBitBuffer << '\\' << value[i]; // escape 'x' with '\x' + pos += 2; + } + else if (parserHelpers::isAscii(c)) + { +- os << value[i]; ++ sevenBitBuffer << value[i]; + ++pos; + } + else +@@ -334,17 +346,31 @@ void parameter::generate(utility::outputStream& os, const string::size_type maxL + + if (needQuoting) + { +- os << '"'; ++ sevenBitBuffer << '"'; + ++pos; + } + ++#if VMIME_ALWAYS_GENERATE_7BIT_PARAMETER ++ os << sevenBitBuffer; ++#endif // !VMIME_ALWAYS_GENERATE_7BIT_PARAMETER ++ + // Also generate an extended parameter if the value contains 8-bit characters + // or is too long for a single line + if (extended || cutValue) + { ++ ++#if VMIME_ALWAYS_GENERATE_7BIT_PARAMETER ++ + os << ';'; + ++pos; + ++#else // !VMIME_ALWAYS_GENERATE_7BIT_PARAMETER ++ ++ // The data output to 'sevenBitBuffer' will be discarded in this case ++ pos = curLinePos; ++ ++#endif // VMIME_ALWAYS_GENERATE_7BIT_PARAMETER ++ + /* RFC-2231 + * ======== + * +@@ -477,6 +503,17 @@ void parameter::generate(utility::outputStream& os, const string::size_type maxL + } + } + } ++#if !VMIME_ALWAYS_GENERATE_7BIT_PARAMETER ++ else ++ { ++ // The value does not contain 8-bit characters and ++ // is short enough for a single line. ++ // "7bit/us-ascii" will suffice in this case. ++ ++ // Output what has been stored in temporary buffer so far ++ os << sevenBitBuffer.str(); ++ } ++#endif // !VMIME_ALWAYS_GENERATE_7BIT_PARAMETER + + if (newLinePos) + *newLinePos = pos; + +commit 3ce1428c7f6d9704ddc0346b664e6fa9dc0aa0ff +Author: vincent-richard +Date: Sat Jul 17 07:00:49 2010 +0000 + + Take account of charset recommended encoding (thanks to John van der Kamp, Zarafa). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@557 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/text.cpp b/src/text.cpp +index 89a541a..a2fe060 100644 +--- a/src/text.cpp ++++ b/src/text.cpp +@@ -24,6 +24,7 @@ + #include "vmime/text.hpp" + + #include "vmime/parserHelpers.hpp" ++#include "vmime/encoding.hpp" + + + namespace vmime +@@ -248,26 +249,36 @@ ref text::newFromString(const string& in, const charset& ch) + + void text::createFromString(const string& in, const charset& ch) + { +- bool is8bit = false; // is the current word 8-bit? +- bool prevIs8bit = false; // is previous word 8-bit? +- unsigned int count = 0; // total number of words ++ string::size_type asciiCount = 0; ++ string::size_type asciiPercent = 0; + + removeAllWords(); + +- const string::size_type asciiCount = +- utility::stringUtils::countASCIIchars(in.begin(), in.end()); ++ // Check whether there is a recommended encoding for this charset. ++ // If so, the whole buffer will be encoded. Else, the number of ++ // 7-bit (ASCII) bytes in the input will be used to determine if ++ // we need to encode the whole buffer. ++ encoding recommendedEnc; ++ const bool alwaysEncode = ch.getRecommendedEncoding(recommendedEnc); + +- const string::size_type asciiPercent = +- (in.length() == 0 ? 100 : (100 * asciiCount) / in.length()); ++ if (!alwaysEncode) ++ { ++ asciiCount = utility::stringUtils::countASCIIchars(in.begin(), in.end()); ++ asciiPercent = (in.length() == 0 ? 100 : (100 * asciiCount) / in.length()); ++ } + + // If there are "too much" non-ASCII chars, encode everything +- if (asciiPercent < 60) // less than 60% ASCII chars ++ if (alwaysEncode || asciiPercent < 60) // less than 60% ASCII chars + { + appendWord(vmime::create (in, ch)); + } + // Else, only encode words which need it + else + { ++ bool is8bit = false; // is the current word 8-bit? ++ bool prevIs8bit = false; // is previous word 8-bit? ++ unsigned int count = 0; // total number of words ++ + for (string::size_type end = in.size(), pos = 0, start = 0 ; ; ) + { + if (pos == end || parserHelpers::isSpace(in[pos])) + +commit fa4f3f1ce3a8e5105c205c039fe62ad0b2657fc5 +Author: vincent-richard +Date: Wed Jul 21 12:21:07 2010 +0000 + + Added section about deleting messages from store. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@558 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/doc/book/net.tex b/doc/book/net.tex +index 08b7df5..3056861 100644 +--- a/doc/book/net.tex ++++ b/doc/book/net.tex +@@ -614,6 +614,27 @@ Suppose we have a message with the following structure: + The previous example will extract the header and body of the \emph{image/jpeg} + part. + ++\subsection{Deleting messages} % --------------------------------------------- ++ ++The following example will delete the second and the third message from the ++store. ++ ++\begin{lstlisting}[caption={Deleting messages}] ++vmime::ref folder = store->getDefaultFolder(); ++ ++folder->deleteMessage(3); ++folder->deleteMessage(2); ++ ++// This is equivalent ++std::vector nums; ++nums.push_back(2); ++nums.push_back(3); ++folder->deleteMessages(nums); ++ ++// This is also equivalent ++folder->deleteMessages(/* from */ 2, /* to */ 3); ++\end{lstlisting} ++ + \subsection{Events} % -------------------------------------------------------- + + As a result of executing some operation (or from time to time, even if no + +commit d6feb9c5503726f99d7aecaa8dedd359950c6e1c +Author: vincent-richard +Date: Thu Aug 5 10:30:22 2010 +0000 + + Connection time out. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@559 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/imap/IMAPConnection.cpp b/src/net/imap/IMAPConnection.cpp +index 825a002..e2b60ed 100644 +--- a/src/net/imap/IMAPConnection.cpp ++++ b/src/net/imap/IMAPConnection.cpp +@@ -99,7 +99,7 @@ void IMAPConnection::connect() + m_timeoutHandler = store->getTimeoutHandlerFactory()->create(); + + // Create and connect the socket +- m_socket = store->getSocketFactory()->create(); ++ m_socket = store->getSocketFactory()->create(m_timeoutHandler); + + #if VMIME_HAVE_TLS_SUPPORT + if (store->isIMAPS()) // dedicated port/IMAPS +diff --git a/src/net/pop3/POP3Store.cpp b/src/net/pop3/POP3Store.cpp +index e5e8ba7..9d554c6 100644 +--- a/src/net/pop3/POP3Store.cpp ++++ b/src/net/pop3/POP3Store.cpp +@@ -138,7 +138,7 @@ void POP3Store::connect() + m_timeoutHandler = getTimeoutHandlerFactory()->create(); + + // Create and connect the socket +- m_socket = getSocketFactory()->create(); ++ m_socket = getSocketFactory()->create(m_timeoutHandler); + + #if VMIME_HAVE_TLS_SUPPORT + if (m_isPOP3S) // dedicated port/POP3S +diff --git a/src/net/smtp/SMTPTransport.cpp b/src/net/smtp/SMTPTransport.cpp +index 917a56c..71f166b 100644 +--- a/src/net/smtp/SMTPTransport.cpp ++++ b/src/net/smtp/SMTPTransport.cpp +@@ -100,7 +100,7 @@ void SMTPTransport::connect() + m_timeoutHandler = getTimeoutHandlerFactory()->create(); + + // Create and connect the socket +- m_socket = getSocketFactory()->create(); ++ m_socket = getSocketFactory()->create(m_timeoutHandler); + + #if VMIME_HAVE_TLS_SUPPORT + if (m_isSMTPS) // dedicated port/SMTPS +diff --git a/src/platforms/posix/posixSocket.cpp b/src/platforms/posix/posixSocket.cpp +index 807ec47..b8bb8b1 100644 +--- a/src/platforms/posix/posixSocket.cpp ++++ b/src/platforms/posix/posixSocket.cpp +@@ -49,8 +49,8 @@ namespace posix { + // posixSocket + // + +-posixSocket::posixSocket() +- : m_desc(-1) ++posixSocket::posixSocket(ref th) ++ : m_timeoutHandler(th), m_desc(-1) + { + } + +@@ -105,11 +105,115 @@ void posixSocket::connect(const vmime::string& address, const vmime::port_t port + if (sock < 0) + continue; // try next + +- if (::connect(sock, res->ai_addr, res->ai_addrlen) < 0) ++ if (m_timeoutHandler != NULL) + { +- ::close(sock); +- sock = -1; +- continue; // try next ++ ::fcntl(sock, F_SETFL, ::fcntl(sock, F_GETFL) | O_NONBLOCK); ++ ++ if (::connect(sock, res->ai_addr, res->ai_addrlen) < 0) ++ { ++ switch (errno) ++ { ++ case 0: ++ case EINPROGRESS: ++ case EINTR: ++#if defined(EAGAIN) ++ case EAGAIN: ++#endif // EAGAIN ++#if defined(EWOULDBLOCK) && (!defined(EAGAIN) || (EWOULDBLOCK != EAGAIN)) ++ case EWOULDBLOCK: ++#endif // EWOULDBLOCK ++ ++ // Connection in progress ++ break; ++ ++ default: ++ ++ ::close(sock); ++ sock = -1; ++ continue; // try next ++ } ++ ++ // Wait for socket to be connected. ++ // We will check for time out every second. ++ fd_set fds; ++ FD_ZERO(&fds); ++ FD_SET(sock, &fds); ++ ++ fd_set fdsError; ++ FD_ZERO(&fdsError); ++ FD_SET(sock, &fdsError); ++ ++ struct timeval tm; ++ tm.tv_sec = 1; ++ tm.tv_usec = 0; ++ ++ m_timeoutHandler->resetTimeOut(); ++ ++ bool connected = false; ++ ++ do ++ { ++ const int ret = select(sock + 1, NULL, &fds, &fdsError, &tm); ++ ++ // Success ++ if (ret > 0) ++ { ++ connected = true; ++ break; ++ } ++ // Error ++ else if (ret < -1) ++ { ++ if (errno != EINTR) ++ { ++ // Cancel connection ++ break; ++ } ++ } ++ // 1-second timeout ++ else if (ret == 0) ++ { ++ if (m_timeoutHandler->isTimeOut()) ++ { ++ if (!m_timeoutHandler->handleTimeOut()) ++ { ++ // Cancel connection ++ break; ++ } ++ else ++ { ++ // Reset timeout and keep waiting for connection ++ m_timeoutHandler->resetTimeOut(); ++ } ++ } ++ else ++ { ++ // Keep waiting for connection ++ } ++ } ++ ++ ::sched_yield(); ++ ++ } while (true); ++ ++ if (!connected) ++ { ++ ::close(sock); ++ sock = -1; ++ continue; // try next ++ } ++ ++ break; ++ } ++ } ++ else ++ { ++ if (::connect(sock, res->ai_addr, res->ai_addrlen) < 0) ++ { ++ ::close(sock); ++ sock = -1; ++ continue; // try next ++ } + } + } + +@@ -325,7 +429,14 @@ void posixSocket::throwSocketError(const int err) + + ref posixSocketFactory::create() + { +- return vmime::create (); ++ ref th = NULL; ++ return vmime::create (th); ++} ++ ++ ++ref posixSocketFactory::create(ref th) ++{ ++ return vmime::create (th); + } + + +diff --git a/tests/testUtils.hpp b/tests/testUtils.hpp +index 9aee153..aee50dc 100644 +--- a/tests/testUtils.hpp ++++ b/tests/testUtils.hpp +@@ -260,6 +260,11 @@ public: + { + return vmime::create (); + } ++ ++ vmime::ref create(vmime::ref /* th */) ++ { ++ return vmime::create (); ++ } + }; + + +diff --git a/vmime/net/socket.hpp b/vmime/net/socket.hpp +index ec6a9d3..b394649 100644 +--- a/vmime/net/socket.hpp ++++ b/vmime/net/socket.hpp +@@ -27,6 +27,8 @@ + + #include "vmime/base.hpp" + ++#include "vmime/net/timeoutHandler.hpp" ++ + + namespace vmime { + namespace net { +@@ -117,7 +119,18 @@ public: + + virtual ~socketFactory() { } + ++ /** Creates a socket without timeout handler. ++ * ++ * @return a new socket ++ */ + virtual ref create() = 0; ++ ++ /** Creates a socket with the specified timeout handler. ++ * ++ * @param th timeout handler ++ * @return a new socket ++ */ ++ virtual ref create(ref th) = 0; + }; + + +diff --git a/vmime/platforms/posix/posixSocket.hpp b/vmime/platforms/posix/posixSocket.hpp +index 9cd49d4..7e0c2d3 100644 +--- a/vmime/platforms/posix/posixSocket.hpp ++++ b/vmime/platforms/posix/posixSocket.hpp +@@ -40,7 +40,7 @@ class posixSocket : public vmime::net::socket + { + public: + +- posixSocket(); ++ posixSocket(ref th); + ~posixSocket(); + + void connect(const vmime::string& address, const vmime::port_t port); +@@ -61,6 +61,8 @@ protected: + + private: + ++ ref m_timeoutHandler; ++ + char m_buffer[65536]; + int m_desc; + }; +@@ -72,6 +74,7 @@ class posixSocketFactory : public vmime::net::socketFactory + public: + + ref create(); ++ ref create(ref th); + }; + + + +commit 5bd1361b6024c687f06318af32cab5c7502bbc55 +Author: vincent-richard +Date: Mon Aug 16 10:21:03 2010 +0000 + + Added stubs for timeout handler (#3045770). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@560 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/platforms/windows/windowsSocket.cpp b/src/platforms/windows/windowsSocket.cpp +index 3ff9ad5..430c8ea 100644 +--- a/src/platforms/windows/windowsSocket.cpp ++++ b/src/platforms/windows/windowsSocket.cpp +@@ -38,8 +38,8 @@ namespace windows { + // posixSocket + // + +-windowsSocket::windowsSocket() +- : m_desc(-1) ++windowsSocket::windowsSocket(ref th) ++ : m_timeoutHandler(th), m_desc(-1) + { + WSAData wsaData; + WSAStartup(MAKEWORD(1, 1), &wsaData); +@@ -179,9 +179,14 @@ void windowsSocket::sendRaw(const char* buffer, const size_type count) + + ref windowsSocketFactory::create() + { +- return vmime::create (); ++ ref th = NULL; ++ return vmime::create (th); + } + ++ref windowsSocketFactory::create(ref th) ++{ ++ return vmime::create (th); ++} + + } // posix + } // platforms +diff --git a/vmime/platforms/windows/windowsSocket.hpp b/vmime/platforms/windows/windowsSocket.hpp +index 2940157..1c89aeb 100644 +--- a/vmime/platforms/windows/windowsSocket.hpp ++++ b/vmime/platforms/windows/windowsSocket.hpp +@@ -41,6 +41,7 @@ class windowsSocket : public vmime::net::socket + { + public: + windowsSocket(); ++ windowsSocket(ref th); + ~windowsSocket(); + + public: +@@ -59,6 +60,8 @@ public: + + private: + ++ ref m_timeoutHandler; ++ + char m_buffer[65536]; + SOCKET m_desc; + }; +@@ -70,6 +73,7 @@ class windowsSocketFactory : public vmime::net::socketFactory + public: + + ref create(); ++ ref create(ref th); + }; + + + +commit e2f160f70bdc0298609007ea451d2b19e8938a0c +Author: vincent-richard +Date: Tue Aug 17 21:47:25 2010 +0000 + + Encode TSpecials in RFC-2231 encoded chunks. + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@561 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/parameter.cpp b/src/parameter.cpp +index 53adaca..d923e68 100644 +--- a/src/parameter.cpp ++++ b/src/parameter.cpp +@@ -432,9 +432,21 @@ void parameter::generate(utility::outputStream& os, const string::size_type maxL + case '\t': + case '\r': + case '\n': ++ case '%': + case '"': + case ';': + case ',': ++ case '(': ++ case ')': ++ case '<': ++ case '>': ++ case '@': ++ case ':': ++ case '/': ++ case '[': ++ case ']': ++ case '?': ++ case '=': + + encode = true; + break; +diff --git a/tests/parser/parameterTest.cpp b/tests/parser/parameterTest.cpp +index 803bb59..72f9e9b 100644 +--- a/tests/parser/parameterTest.cpp ++++ b/tests/parser/parameterTest.cpp +@@ -37,6 +37,8 @@ VMIME_TEST_SUITE_BEGIN + VMIME_TEST(testGenerateRFC2231) + VMIME_TEST(testNonStandardEncodedParam) + VMIME_TEST(testParseNonSignificantWS) ++ VMIME_TEST(testEncodeTSpecials) ++ VMIME_TEST(testEncodeTSpecialsInRFC2231) + VMIME_TEST_LIST_END + + +@@ -222,7 +224,11 @@ VMIME_TEST_SUITE_BEGIN + p1.appendParameter(vmime::create ("param1", + vmime::word("value 1\xe9", vmime::charset("charset")))); + ++#if VMIME_ALWAYS_GENERATE_7BIT_PARAMETER + VASSERT_EQ("1", "F: X; param1=\"value 1\";param1*=charset''value%201%E9", p1.generate()); ++#else ++ VASSERT_EQ("1", "F: X; param1*=charset''value%201%E9", p1.generate()); ++#endif + + // Value that spans on multiple lines + parameterizedHeaderField p2; +@@ -230,6 +236,7 @@ VMIME_TEST_SUITE_BEGIN + vmime::word("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", + vmime::charset("charset")))); + ++#if VMIME_ALWAYS_GENERATE_7BIT_PARAMETER + VASSERT_EQ("2", "F: X; \r\n " + "param1=abcdefghijklm;\r\n " + "param1*0*=charset''abc;\r\n " +@@ -239,6 +246,16 @@ VMIME_TEST_SUITE_BEGIN + "param1*4*=EFGHIJKLM;\r\n " + "param1*5*=NOPQRSTUV;\r\n " + "param1*6*=WXYZ", p2.generate(25)); // max line length = 25 ++#else ++ VASSERT_EQ("2", "F: X; \r\n " ++ "param1*0*=charset''abc;\r\n " ++ "param1*1*=defghijkl;\r\n " ++ "param1*2*=mnopqrstu;\r\n " ++ "param1*3*=vwxyzABCD;\r\n " ++ "param1*4*=EFGHIJKLM;\r\n " ++ "param1*5*=NOPQRSTUV;\r\n " ++ "param1*6*=WXYZ", p2.generate(25)); // max line length = 25 ++#endif + + // Non-ASCII parameter value + parameterizedHeaderField p3; +@@ -246,6 +263,7 @@ VMIME_TEST_SUITE_BEGIN + vmime::word("δσσσσσσσσσσσσσσσσσσσσδσδα δσαδσδσαδσαδασδασ δσαδασδσα δσαδασδσα δασδασδασ δασαχφδδσα 2008.doc", + vmime::charset("utf-8")))); + ++#if VMIME_ALWAYS_GENERATE_7BIT_PARAMETER + VASSERT_EQ("3", "F: X; \r\n " + "param1=\" 2008.doc\";param1*0*=utf-8''%CE%B4%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " + "param1*1*=%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " +@@ -255,6 +273,16 @@ VMIME_TEST_SUITE_BEGIN + "param1*5*=%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CF%83%CE%B1%20%CE%B4%CE%B1%CF%83;\r\n " + "param1*6*=%CE%B4%CE%B1%CF%83%CE%B4%CE%B1%CF%83%20%CE%B4%CE%B1%CF%83%CE%B1%CF;\r\n " + "param1*7*=%87%CF%86%CE%B4%CE%B4%CF%83%CE%B1%202008.doc", p3.generate(80)); ++#else ++ VASSERT_EQ("3", "F: X; param1*0*=utf-8''%CE%B4%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " ++ "param1*1*=%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83%CF%83;\r\n " ++ "param1*2*=%CE%B4%CF%83%CE%B4%CE%B1%20%CE%B4%CF%83%CE%B1%CE%B4%CF%83%CE%B4%CF;\r\n " ++ "param1*3*=%83%CE%B1%CE%B4%CF%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CE%B1%CF%83%20;\r\n " ++ "param1*4*=%CE%B4%CF%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CF%83%CE%B1%20%CE%B4%CF;\r\n " ++ "param1*5*=%83%CE%B1%CE%B4%CE%B1%CF%83%CE%B4%CF%83%CE%B1%20%CE%B4%CE%B1%CF%83;\r\n " ++ "param1*6*=%CE%B4%CE%B1%CF%83%CE%B4%CE%B1%CF%83%20%CE%B4%CE%B1%CF%83%CE%B1%CF;\r\n " ++ "param1*7*=%87%CF%86%CE%B4%CE%B4%CF%83%CE%B1%202008.doc", p3.generate(80)); ++#endif + } + + void testNonStandardEncodedParam() +@@ -297,5 +325,32 @@ VMIME_TEST_SUITE_BEGIN + VASSERT_EQ("2.4", "value1", PARAM_VALUE(p2, 0)); + } + ++ // Encode "tspecials" ++ void testEncodeTSpecials() ++ { ++ VASSERT_EQ(" 1", "p=\"val(ue\"", vmime::create ("p", "val(ue")->generate()); ++ VASSERT_EQ(" 2", "p=\"val)ue\"", vmime::create ("p", "val)ue")->generate()); ++ VASSERT_EQ(" 3", "p=\"val("p", "valgenerate()); ++ VASSERT_EQ(" 4", "p=\"val>ue\"", vmime::create ("p", "val>ue")->generate()); ++ VASSERT_EQ(" 5", "p=\"val@ue\"", vmime::create ("p", "val@ue")->generate()); ++ VASSERT_EQ(" 6", "p=\"val,ue\"", vmime::create ("p", "val,ue")->generate()); ++ VASSERT_EQ(" 7", "p=\"val;ue\"", vmime::create ("p", "val;ue")->generate()); ++ VASSERT_EQ(" 8", "p=\"val:ue\"", vmime::create ("p", "val:ue")->generate()); ++ VASSERT_EQ(" 9", "p=\"val/ue\"", vmime::create ("p", "val/ue")->generate()); ++ VASSERT_EQ("10", "p=\"val[ue\"", vmime::create ("p", "val[ue")->generate()); ++ VASSERT_EQ("11", "p=\"val]ue\"", vmime::create ("p", "val]ue")->generate()); ++ VASSERT_EQ("12", "p=\"val?ue\"", vmime::create ("p", "val?ue")->generate()); ++ VASSERT_EQ("13", "p=\"val=ue\"", vmime::create ("p", "val=ue")->generate()); ++ VASSERT_EQ("14", "p=\"val ue\"", vmime::create ("p", "val ue")->generate()); ++ VASSERT_EQ("15", "p=\"val\tue\"", vmime::create ("p", "val\tue")->generate()); ++ } ++ ++ // http://sourceforge.net/projects/vmime/forums/forum/237356/topic/3812278 ++ void testEncodeTSpecialsInRFC2231() ++ { ++ VASSERT_EQ("1", "filename*=UTF-8''my_file_name_%C3%B6%C3%A4%C3%BC_%281%29.txt", ++ vmime::create ("filename", "my_file_name_\xc3\xb6\xc3\xa4\xc3\xbc_(1).txt")->generate()); ++ } ++ + VMIME_TEST_SUITE_END + + +commit 593591674556159fa2ff19b9c421254770a6e8ac +Author: vincent-richard +Date: Thu Aug 19 07:50:15 2010 +0000 + + Fixed pointer-type argument for gnutls_credentials_set (thanks to Mike Smellie). + + git-svn-id: https://vmime.svn.sourceforge.net/svnroot/vmime/trunk@562 5301114d-f842-0410-bbdd-996ee0417009 + +diff --git a/src/net/tls/TLSSession.cpp b/src/net/tls/TLSSession.cpp +index cb5351a..010c007 100644 +--- a/src/net/tls/TLSSession.cpp ++++ b/src/net/tls/TLSSession.cpp +@@ -199,10 +199,10 @@ TLSSession::TLSSession(ref cv) + + // Initialize credentials + gnutls_credentials_set(*m_gnutlsSession, +- GNUTLS_CRD_ANON, &g_gnutlsGlobal.anonCred); ++ GNUTLS_CRD_ANON, g_gnutlsGlobal.anonCred); + + gnutls_credentials_set(*m_gnutlsSession, +- GNUTLS_CRD_CERTIFICATE, &g_gnutlsGlobal.certCred); ++ GNUTLS_CRD_CERTIFICATE, g_gnutlsGlobal.certCred); + } + + -- cgit v0.12