[TASK] swift mailer update to version 4.1.3
authorSimon Schaufelberger <simonschaufi@googlemail.com>
Thu, 24 Nov 2011 18:45:15 +0000 (19:45 +0100)
committerSteffen Ritter <info@rs-websystems.de>
Mon, 12 Dec 2011 06:56:46 +0000 (07:56 +0100)
Change-Id: Id2ffafb17b3f9e81d6fb0f623528021c7b958ec1
Resolves: #32062
Releases: 4.7
Reviewed-on: http://review.typo3.org/6902
Reviewed-by: Jigal van Hemert
Tested-by: Jigal van Hemert
Reviewed-by: Oliver Klee
Reviewed-by: Steffen Ritter
Tested-by: Steffen Ritter
159 files changed:
typo3/contrib/swiftmailer/CHANGES [new file with mode: 0755]
typo3/contrib/swiftmailer/LICENSE [changed mode: 0644->0755]
typo3/contrib/swiftmailer/README [changed mode: 0644->0755]
typo3/contrib/swiftmailer/VERSION [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Attachment.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/ByteStream/AbstractFilterableInputStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/ByteStream/ArrayByteStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/ByteStream/FileByteStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterReader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterReader/GenericFixedWidthReader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterReader/UsAsciiReader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterReader/Utf8Reader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterReaderFactory.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterStream/ArrayCharacterStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/CharacterStream/NgCharacterStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/ConfigurableSpool.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/DependencyContainer.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/DependencyException.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/EmbeddedFile.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Encoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Encoder/Base64Encoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Encoder/QpEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Encoder/Rfc2231Encoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Encoding.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/CommandEvent.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/CommandListener.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/Event.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/EventDispatcher.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/EventListener.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/EventObject.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/ResponseEvent.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/ResponseListener.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/SendEvent.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/SendListener.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/SimpleEventDispatcher.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/TransportChangeEvent.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/TransportChangeListener.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/TransportExceptionEvent.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Events/TransportExceptionListener.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/FailoverTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/FileSpool.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/FileStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Filterable.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Image.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/InputByteStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/IoException.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/KeyCache.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/KeyCache/ArrayKeyCache.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/KeyCache/DiskKeyCache.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/KeyCache/DummyKeyCache.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/KeyCache/KeyCacheInputStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/KeyCache/NullKeyCache.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/LoadBalancedTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/MailTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mailer.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mailer/ArrayRecipientIterator.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mailer/RecipientIterator.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Message.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Attachment.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/CharsetObserver.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/ContentEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/EmbeddedFile.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/EncodingObserver.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Grammar.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Header.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/HeaderEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/HeaderFactory.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/HeaderSet.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Headers/AbstractHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Headers/DateHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Headers/IdentificationHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Headers/MailboxHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Headers/ParameterizedHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Headers/PathHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Headers/UnstructuredHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/Message.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/MimeEntity.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/MimePart.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/ParameterizedHeader.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/SimpleHeaderFactory.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/SimpleHeaderSet.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/SimpleMessage.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Mime/SimpleMimeEntity.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/MimePart.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/NullTransport.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/OutputByteStream.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/AntiFloodPlugin.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/BandwidthMonitorPlugin.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Decorator/Replacements.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/DecoratorPlugin.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/ImpersonatePlugin.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Logger.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/LoggerPlugin.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Loggers/ArrayLogger.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Loggers/EchoLogger.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/MessageLogger.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Connection.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Pop/Pop3Exception.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/PopBeforeSmtpPlugin.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/RedirectingPlugin.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Reporter.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/ReporterPlugin.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Reporters/HitReporter.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Reporters/HtmlReporter.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Sleeper.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/ThrottlerPlugin.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Plugins/Timer.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Preferences.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/ReplacementFilterFactory.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/RfcComplianceException.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/SendmailTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/SmtpTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Spool.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/SpoolTransport.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/StreamFilter.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilter.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/StreamFilters/StringReplacementFilterFactory.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/SwiftException.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/AbstractSmtpTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/Esmtp/AuthHandler.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/Esmtp/Authenticator.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/EsmtpHandler.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/EsmtpTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/FailoverTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/IoBuffer.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/LoadBalancedTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/MailInvoker.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/MailTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/NullTransport.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/SendmailTransport.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/SimpleMailInvoker.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/SmtpAgent.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/SpoolTransport.php [new file with mode: 0755]
typo3/contrib/swiftmailer/classes/Swift/Transport/StreamBuffer.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/TransportException.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/classes/Swift/Validate.php [new file with mode: 0755]
typo3/contrib/swiftmailer/dependency_maps/cache_deps.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/dependency_maps/message_deps.php [new file with mode: 0755]
typo3/contrib/swiftmailer/dependency_maps/mime_deps.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/dependency_maps/transport_deps.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/mime_types.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/preferences.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/swift_init.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/swift_required.php [changed mode: 0644->0755]
typo3/contrib/swiftmailer/swift_required_pear.php [changed mode: 0644->0755]

diff --git a/typo3/contrib/swiftmailer/CHANGES b/typo3/contrib/swiftmailer/CHANGES
new file mode 100755 (executable)
index 0000000..7a863f1
--- /dev/null
@@ -0,0 +1,45 @@
+Changelog since Version 4.1.x
+=============================
+
+4.1.3 (2011-10-27)
+------------------
+
+ * added STARTTLS support
+ * added missing @return tags on fluent methods
+ * added a MessageLogger plugin that logs all sent messages
+ * added composer.json
+
+4.1.2 (2011-09-13)
+------------------
+
+ * fixed wrong detection of magic_quotes_runtime
+ * fixed fatal errors when no To or Subject header has been set
+ * fixed charset on parameter header continuations
+ * added documentation about how to install Swiftmailer from the PEAR channel
+ * fixed various typos and markup problem in the documentation
+ * fixed warning when cache directory does not exist
+ * fixed "slashes are escaped" bug
+ * changed require_once() to require() in autoload
+
+4.1.1 (2011-07-04)
+------------------
+
+ * added missing file in PEAR package
+
+4.1.0 (2011-06-30)
+------------------
+
+ * documentation has been converted to ReST
+
+4.1.0 RC1 (2011-06-17)
+----------------------
+
+New features:
+
+ * changed the Decorator Plugin to allow replacements in all headers
+ * added Swift_Mime_Grammar and Swift_Validate to validate an email address
+ * modified the autoloader to lazy-initialize Swiftmailer
+ * removed Swift_Mailer::batchSend()
+ * added NullTransport
+ * added new plugins: RedirectingPlugin and ImpersonatePlugin
+ * added a way to send messages asynchronously (Spool)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
index 794d832..3ba719b
@@ -7,8 +7,8 @@ It is released under the LGPL license.
 Homepage:      http://swiftmailer.org
 Documentation: http://swiftmailer.org/docs
 Mailing List:  http://groups.google.com/group/swiftmailer
-Bugs:          http://swiftmailer.lighthouseapp.com/
-Repository:    http://github.com/swiftmailer/swiftmailer
+Bugs:          https://github.com/swiftmailer/swiftmailer/issues
+Repository:    https://github.com/swiftmailer/swiftmailer
 
 Swift Mailer is highly object-oriented by design and lends itself
 to use in complex web application with a great deal of flexibility.
old mode 100644 (file)
new mode 100755 (executable)
index 2064f10..f46cd48
@@ -1 +1 @@
-Swift-4.0.6
+Swift-4.1.3
old mode 100644 (file)
new mode 100755 (executable)
index 9fa1b63..5d947a5
 
 /**
  * General utility class in Swift Mailer, not to be instantiated.
- *
+ * 
  * @package Swift
- *
+ * 
  * @author Chris Corbyn
  */
 abstract class Swift
 {
-
+  
+  static $initialized = false;
+  static $initPath;
+  
   /** Swift Mailer Version number generated during dist release process */
-  const VERSION = '4.0.6';
-
+  const VERSION = '4.1.3';
+  
   /**
    * Internal autoloader for spl_autoload_register().
-   *
+   * 
    * @param string $class
    */
   public static function autoload($class)
   {
     //Don't interfere with other autoloaders
-    if (0 !== strpos($class, 'Swift'))
+    if (0 !== strpos($class, 'Swift_'))
     {
-      return false;
+      return;
     }
 
     $path = dirname(__FILE__).'/'.str_replace('_', '/', $class).'.php';
 
     if (!file_exists($path))
     {
-      return false;
+      return;
     }
 
-    require_once $path;
-  }
+    if (self::$initPath && !self::$initialized)
+    {
+      self::$initialized = true;
+      require self::$initPath;
+    }
 
+    require $path;
+  }
+  
   /**
    * Configure autoloading using Swift Mailer.
-   *
+   * 
    * This is designed to play nicely with other autoloaders.
+   *
+   * @param string $initPath The init script to load when autoloading the first Swift class
    */
-  public static function registerAutoload()
+  public static function registerAutoload($initPath = null)
   {
+    self::$initPath = $initPath;
     spl_autoload_register(array('Swift', 'autoload'));
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 66a0865..9362b84
@@ -8,9 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Attachment.php';
-//@require 'Swift/ByteStream/FileByteStream.php';
-//@require 'Swift/DependencyContainer.php';
 
 /**
  * Attachment class for attaching files to a {@link Swift_Mime_Message}.
@@ -20,7 +17,7 @@
  */
 class Swift_Attachment extends Swift_Mime_Attachment
 {
-
+  
   /**
    * Create a new Attachment.
    * Details may be optionally provided to the constructor.
@@ -36,7 +33,7 @@ class Swift_Attachment extends Swift_Mime_Attachment
       Swift_DependencyContainer::getInstance()
         ->createDependenciesFor('mime.attachment')
       );
-
+    
     $this->setBody($data);
     $this->setFilename($filename);
     if ($contentType)
@@ -44,7 +41,7 @@ class Swift_Attachment extends Swift_Mime_Attachment
       $this->setContentType($contentType);
     }
   }
-
+  
   /**
    * Create a new Attachment.
    * @param string|Swift_OutputByteStream $data
@@ -57,7 +54,7 @@ class Swift_Attachment extends Swift_Mime_Attachment
   {
     return new self($data, $filename, $contentType);
   }
-
+  
   /**
    * Create a new Attachment from a filesystem path.
    * @param string $path
@@ -71,5 +68,5 @@ class Swift_Attachment extends Swift_Mime_Attachment
       $contentType
       );
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index a63d846..7a71c51
@@ -8,9 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/Filterable.php';
-//@require 'Swift/StreamFilter.php';
 
 /**
  * Provides the base functionality for an InputStream supporting filters.
 abstract class Swift_ByteStream_AbstractFilterableInputStream
   implements Swift_InputByteStream, Swift_Filterable
 {
-
+  
   /** Write sequence */
   private $_sequence = 0;
-
+  
   /** StreamFilters */
   private $_filters = array();
-
+  
   /** A buffer for writing */
   private $_writeBuffer = '';
-
+  
   /** Bound streams */
   private $_mirrors = array();
-
+  
   /**
    * Commit the given bytes to the storage medium immediately.
    * @param string $bytes
    * @access protected
    */
   abstract protected function _commit($bytes);
-
+  
   /**
    * Flush any buffers/content with immediate effect.
    * @access protected
    */
   abstract protected function _flush();
-
+  
   /**
    * Add a StreamFilter to this InputByteStream.
    * @param Swift_StreamFilter $filter
@@ -56,7 +53,7 @@ abstract class Swift_ByteStream_AbstractFilterableInputStream
   {
     $this->_filters[$key] = $filter;
   }
-
+  
   /**
    * Remove an already present StreamFilter based on its $key.
    * @param string $key
@@ -65,7 +62,7 @@ abstract class Swift_ByteStream_AbstractFilterableInputStream
   {
     unset($this->_filters[$key]);
   }
-
+  
   /**
    * Writes $bytes to the end of the stream.
    * @param string $bytes
@@ -84,36 +81,36 @@ abstract class Swift_ByteStream_AbstractFilterableInputStream
     $this->_doWrite($this->_writeBuffer);
     return ++$this->_sequence;
   }
-
+  
   /**
    * For any bytes that are currently buffered inside the stream, force them
    * off the buffer.
-   *
+   * 
    * @throws Swift_IoException
    */
   public function commit()
   {
     $this->_doWrite($this->_writeBuffer);
   }
-
+  
   /**
    * Attach $is to this stream.
    * The stream acts as an observer, receiving all data that is written.
    * All {@link write()} and {@link flushBuffers()} operations will be mirrored.
-   *
+   * 
    * @param Swift_InputByteStream $is
    */
   public function bind(Swift_InputByteStream $is)
   {
     $this->_mirrors[] = $is;
   }
-
+  
   /**
    * Remove an already bound stream.
    * If $is is not bound, no errors will be raised.
    * If the stream currently has any buffered data it will be written to $is
    * before unbinding occurs.
-   *
+   * 
    * @param Swift_InputByteStream $is
    */
   public function unbind(Swift_InputByteStream $is)
@@ -130,7 +127,7 @@ abstract class Swift_ByteStream_AbstractFilterableInputStream
       }
     }
   }
-
+  
   /**
    * Flush the contents of the stream (empty it) and set the internal pointer
    * to the beginning.
@@ -143,15 +140,15 @@ abstract class Swift_ByteStream_AbstractFilterableInputStream
       $this->_doWrite($this->_writeBuffer);
     }
     $this->_flush();
-
+    
     foreach ($this->_mirrors as $stream)
     {
       $stream->flushBuffers();
     }
   }
-
+  
   // -- Private methods
-
+  
   /** Run $bytes through all filters */
   private function _filter($bytes)
   {
@@ -161,18 +158,18 @@ abstract class Swift_ByteStream_AbstractFilterableInputStream
     }
     return $bytes;
   }
-
+  
   /** Just write the bytes to the stream */
   private function _doWrite($bytes)
   {
     $this->_commit($this->_filter($bytes));
-
+    
     foreach ($this->_mirrors as $stream)
     {
       $stream->write($bytes);
     }
-
+    
     $this->_writeBuffer = '';
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 6cd5490..c1cd01a
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStream.php';
 
 /**
  * Allows reading and writing of bytes to and from an array.
@@ -41,10 +39,10 @@ class Swift_ByteStream_ArrayByteStream
    * @access private
    */
   private $_offset = 0;
-
+  
   /** Bound streams */
   private $_mirrors = array();
-
+  
   /**
    * Create a new ArrayByteStream.
    * If $stack is given the stream will be populated with the bytes it contains.
@@ -107,20 +105,20 @@ class Swift_ByteStream_ArrayByteStream
       $this->_array[] = $value;
     }
     $this->_arraySize = count($this->_array);
-
+    
     foreach ($this->_mirrors as $stream)
     {
       $stream->write($bytes);
     }
   }
-
+  
   /**
    * Not used.
    */
   public function commit()
   {
   }
-
+  
   /**
    * Attach $is to this stream.
    * The stream acts as an observer, receiving all data that is written.
@@ -132,7 +130,7 @@ class Swift_ByteStream_ArrayByteStream
   {
     $this->_mirrors[] = $is;
   }
-
+  
   /**
    * Remove an already bound stream.
    * If $is is not bound, no errors will be raised.
@@ -180,7 +178,7 @@ class Swift_ByteStream_ArrayByteStream
     $this->_offset = 0;
     $this->_array = array();
     $this->_arraySize = 0;
-
+    
     foreach ($this->_mirrors as $stream)
     {
       $stream->flushBuffers();
old mode 100644 (file)
new mode 100755 (executable)
index 2b09124..89a9c81
@@ -8,10 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/ByteStream/AbstractFilterableInputStream.php';
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/FileStream.php';
-//@require 'Swift/IoException.php';
 
 /**
  * Allows reading and writing of bytes to and from a file.
@@ -23,25 +19,28 @@ class Swift_ByteStream_FileByteStream
   extends Swift_ByteStream_AbstractFilterableInputStream
   implements Swift_FileStream
 {
-
+  
   /** The internal pointer offset */
   private $_offset = 0;
-
+  
   /** The path to the file */
   private $_path;
-
+  
   /** The mode this file is opened in for writing */
   private $_mode;
-
+  
   /** A lazy-loaded resource handle for reading the file */
   private $_reader;
-
+  
   /** A lazy-loaded resource handle for writing the file */
   private $_writer;
-
+  
   /** If magic_quotes_runtime is on, this will be true */
   private $_quotes = false;
 
+  /** If stream is seekable true/false, or null if not known */
+  private $_seekable = null;
+  
   /**
    * Create a new FileByteStream for $path.
    * @param string $path
@@ -51,9 +50,13 @@ class Swift_ByteStream_FileByteStream
   {
     $this->_path = $path;
     $this->_mode = $writable ? 'w+b' : 'rb';
-    $this->_quotes = get_magic_quotes_runtime();
+    
+    if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1)
+    {
+      $this->_quotes = true;
+    }
   }
-
+  
   /**
    * Get the complete path to the file.
    * @return string
@@ -62,7 +65,7 @@ class Swift_ByteStream_FileByteStream
   {
     return $this->_path;
   }
-
+  
   /**
    * Reads $length bytes from the stream into a string and moves the pointer
    * through the stream by $length. If less bytes exist than are requested the
@@ -79,12 +82,12 @@ class Swift_ByteStream_FileByteStream
     {
       if ($this->_quotes)
       {
-        set_magic_quotes_runtime(0);
+        ini_set('magic_quotes_runtime', 0);
       }
       $bytes = fread($fp, $length);
       if ($this->_quotes)
       {
-        set_magic_quotes_runtime(1);
+        ini_set('magic_quotes_runtime', 1);
       }
       $this->_offset = ftell($fp);
       return $bytes;
@@ -94,7 +97,7 @@ class Swift_ByteStream_FileByteStream
       return false;
     }
   }
-
+  
   /**
    * Move the internal read pointer to $byteOffset in the stream.
    * @param int $byteOffset
@@ -104,25 +107,25 @@ class Swift_ByteStream_FileByteStream
   {
     if (isset($this->_reader))
     {
-      fseek($this->_reader, $byteOffset, SEEK_SET);
+      $this->_seekReadStreamToPosition($byteOffset);
     }
     $this->_offset = $byteOffset;
   }
-
+  
   // -- Private methods
-
+  
   /** Just write the bytes to the file */
   protected function _commit($bytes)
   {
     fwrite($this->_getWriteHandle(), $bytes);
     $this->_resetReadHandle();
   }
-
+  
   /** Not used */
   protected function _flush()
   {
   }
-
+  
   /** Get the resource for reading */
   private function _getReadHandle()
   {
@@ -132,13 +135,17 @@ class Swift_ByteStream_FileByteStream
       {
         throw new Swift_IoException(
           'Unable to open file for reading [' . $this->_path . ']'
-          );
+        );
+      }
+      if ($this->_offset <> 0)
+      {
+        $this->_getReadStreamSeekableStatus();
+        $this->_seekReadStreamToPosition($this->_offset);
       }
-      fseek($this->_reader, $this->_offset, SEEK_SET);
     }
     return $this->_reader;
   }
-
+  
   /** Get the resource for writing */
   private function _getWriteHandle()
   {
@@ -148,22 +155,12 @@ class Swift_ByteStream_FileByteStream
       {
         throw new Swift_IoException(
           'Unable to open file for writing [' . $this->_path . ']'
-          );
+        );
       }
     }
     return $this->_writer;
   }
-
-  /** Force a reload of the resource for writing */
-  private function _resetWriteHandle()
-  {
-    if (isset($this->_writer))
-    {
-      fclose($this->_writer);
-      $this->_writer = null;
-    }
-  }
-
+  
   /** Force a reload of the resource for reading */
   private function _resetReadHandle()
   {
@@ -173,5 +170,64 @@ class Swift_ByteStream_FileByteStream
       $this->_reader = null;
     }
   }
-
+  
+  /** Check if ReadOnly Stream is seekable */
+  private function _getReadStreamSeekableStatus()
+  {
+    $metas = stream_get_meta_data($this->_reader);
+    $this->_seekable = $metas['seekable'];
+  }
+  
+  /** Streams in a readOnly stream ensuring copy if needed */
+  private function _seekReadStreamToPosition($offset)
+  {
+    if ($this->_seekable===null)
+    {
+      $this->_getReadStreamSeekableStatus();
+    }
+    if ($this->_seekable === false)
+    {
+      $currentPos = ftell($this->_reader);
+      if ($currentPos<$offset)
+      {
+        $toDiscard = $offset-$currentPos;
+        fread($this->_reader, $toDiscard);
+        return;
+      }
+      $this->_copyReadStream();
+    }
+    fseek($this->_reader, $offset, SEEK_SET);
+  }
+  
+  /** Copy a readOnly Stream to ensure seekability */
+  private function _copyReadStream()
+  {
+    if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b'))
+    {
+      /* We have opened a php:// Stream Should work without problem */
+    } 
+    elseif (function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir()) && ($tmpFile = tmpfile())) 
+    {
+      /* We have opened a tmpfile */
+    } 
+    else
+    {
+      throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available');
+    }
+    $currentPos = ftell($this->_reader);
+    fclose($this->_reader);
+    $source = fopen($this->_path, 'rb');
+    if (!$source)
+    {
+      throw new Swift_IoException('Unable to open file for copying [' . $this->_path . ']');
+    }
+    fseek($tmpFile, 0, SEEK_SET);
+    while (!feof($source)) 
+    {
+      fwrite($tmpFile, fread($source, 4096));
+    }
+    fseek($tmpFile, $currentPos, SEEK_SET);
+    fclose($source);
+    $this->_reader = $tmpFile;
+  }
 }
old mode 100644 (file)
new mode 100755 (executable)
index 0539f62..53d39ec
@@ -20,7 +20,7 @@ interface Swift_CharacterReader
   const MAP_TYPE_INVALID = 0x01;
   const MAP_TYPE_FIXED_LEN = 0x02;
   const MAP_TYPE_POSITIONS = 0x03;
-
+  
   /**
    * Returns the complete charactermap
    *
@@ -31,13 +31,13 @@ interface Swift_CharacterReader
    * @return int
    */
   public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars);
-
+  
   /**
    * Returns mapType
    * @int mapType
    */
   public function getMapType();
-
+  
   /**
    * Returns an integer which specifies how many more bytes to read.
    * A positive integer indicates the number of more bytes to fetch before invoking
old mode 100644 (file)
new mode 100755 (executable)
index e875a41..9d09be2
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/CharacterReader.php';
 
 /**
  * Provides fixed-width byte sizes for reading fixed-width character sets.
 class Swift_CharacterReader_GenericFixedWidthReader
   implements Swift_CharacterReader
 {
-
+   
   /**
    * The number of bytes in a single character.
    * @var int
    * @access private
    */
   private $_width;
-
+       
   /**
    * Creates a new GenericFixedWidthReader using $width bytes per character.
    * @param int $width
@@ -54,9 +53,9 @@ class Swift_CharacterReader_GenericFixedWidthReader
        $ignoredChars = substr($string, - $ignored);
        $currentMap = $this->_width;
        return ($strlen - $ignored)/$this->_width;
-
+       
   }
-
+  
   /**
    * Returns mapType
    * @int mapType
old mode 100644 (file)
new mode 100755 (executable)
index 1a35038..18a1bd8
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/CharacterReader.php';
 
 /**
  * Analyzes US-ASCII characters.
@@ -39,7 +38,7 @@ class Swift_CharacterReader_UsAsciiReader
        }
        return $strlen;
   }
-
+  
   /**
    * Returns mapType
    * @int mapType
@@ -48,7 +47,7 @@ class Swift_CharacterReader_UsAsciiReader
   {
        return self::MAP_TYPE_INVALID;
   }
-
   /**
    * Returns an integer which specifies how many more bytes to read.
    * A positive integer indicates the number of more bytes to fetch before invoking
old mode 100644 (file)
new mode 100755 (executable)
index c6c1d59..f550c56
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/CharacterReader.php';
 
 /**
  * Analyzes UTF-8 characters.
@@ -140,7 +139,7 @@ class Swift_CharacterReader_Utf8Reader
        }
        return $foundChars;
   }
-
+  
   /**
    * Returns mapType
    * @int mapType
@@ -149,7 +148,7 @@ class Swift_CharacterReader_Utf8Reader
   {
        return self::MAP_TYPE_POSITIONS;
   }
-
   /**
    * Returns an integer which specifies how many more bytes to read.
    * A positive integer indicates the number of more bytes to fetch before invoking
old mode 100644 (file)
new mode 100755 (executable)
index 1f45ecc..55ce880
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/CharacterReader.php';
 
 /**
  * A factory for creating CharacterReaders.
@@ -25,5 +24,5 @@ interface Swift_CharacterReaderFactory
    * @return Swift_CharacterReader
    */
   public function getReaderFor($charset);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 128afbc..eb5df3f
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/CharacterReaderFactory.php';
 
 /**
  * Standard factory for creating CharacterReaders.
@@ -26,42 +25,42 @@ class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory
    * @access private
    */
   private $_map = array();
-
+  
   /**
    * Factories which have already been loaded.
    * @var Swift_CharacterReaderFactory[]
    * @access private
    */
   private $_loaded = array();
-
+  
   /**
    * Creates a new CharacterReaderFactory.
    */
   public function __construct()
   {
     $prefix = 'Swift_CharacterReader_';
-
+    
     $singleByte = array(
       'class' => $prefix . 'GenericFixedWidthReader',
       'constructor' => array(1)
       );
-
+    
     $doubleByte = array(
       'class' => $prefix . 'GenericFixedWidthReader',
       'constructor' => array(2)
       );
-
+      
     $fourBytes = array(
       'class' => $prefix . 'GenericFixedWidthReader',
       'constructor' => array(4)
       );
-
+    
     //Utf-8
     $this->_map['utf-?8'] = array(
       'class' => $prefix . 'Utf8Reader',
       'constructor' => array()
       );
-
+    
     //7-8 bit charsets
     $this->_map['(us-)?ascii'] = $singleByte;
     $this->_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte;
@@ -74,17 +73,17 @@ class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory
     $this->_map['mik'] = $singleByte;
     $this->_map['(cork|t1)'] = $singleByte;
     $this->_map['v?iscii'] = $singleByte;
-
+    
     //16 bits
     $this->_map['(ucs-?2|utf-?16)'] = $doubleByte;
-
+    
     //32 bits
     $this->_map['(ucs-?4|utf-?32)'] = $fourBytes;
-
+    
     //Fallback
     $this->_map['.*'] = $singleByte;
   }
-
+  
   /**
    * Returns a CharacterReader suitable for the charset applied.
    * @param string $charset
@@ -115,5 +114,5 @@ class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory
       }
     }
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index b25b4c6..bf91528
@@ -29,27 +29,27 @@ interface Swift_CharacterStream
    * @param string $charset
    */
   public function setCharacterSet($charset);
-
+  
   /**
    * Set the CharacterReaderFactory for multi charset support.
    * @param Swift_CharacterReaderFactory $factory
    */
   public function setCharacterReaderFactory(
     Swift_CharacterReaderFactory $factory);
-
+  
   /**
    * Overwrite this character stream using the byte sequence in the byte stream.
    * @param Swift_OutputByteStream $os output stream to read from
    */
   public function importByteStream(Swift_OutputByteStream $os);
-
+  
   /**
    * Import a string a bytes into this CharacterStream, overwriting any existing
    * data in the stream.
    * @param string $string
    */
   public function importString($string);
-
+  
   /**
    * Read $length characters from the stream and move the internal pointer
    * $length further into the stream.
@@ -57,7 +57,7 @@ interface Swift_CharacterStream
    * @return string
    */
   public function read($length);
-
+  
   /**
    * Read $length characters from the stream and return a 1-dimensional array
    * containing there octet values.
@@ -65,22 +65,22 @@ interface Swift_CharacterStream
    * @return int[]
    */
   public function readBytes($length);
-
+  
   /**
    * Write $chars to the end of the stream.
    * @param string $chars
    */
   public function write($chars);
-
+  
   /**
    * Move the internal pointer to $charOffset in the stream.
    * @param int $charOffset
    */
   public function setPointer($charOffset);
-
+  
   /**
    * Empty the stream and reset the internal pointer.
    */
   public function flushContents();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 6f17540..b74b08f
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/CharacterStream.php';
-//@require 'Swift/OutputByteStream.php';
 
 
 /**
 class Swift_CharacterStream_ArrayCharacterStream
   implements Swift_CharacterStream
 {
-
+  
   /** A map of byte values and their respective characters */
   private static $_charMap;
-
+  
   /** A map of characters and their derivative byte values */
   private static $_byteMap;
-
+  
   /** The char reader (lazy-loaded) for the current charset */
   private $_charReader;
 
@@ -242,7 +240,7 @@ class Swift_CharacterStream_ArrayCharacterStream
           if ($buf_len - $buf_pos < $need)
           {
             $new = $this->_reloadBuffer($fp, $need);
-
+            
             if ($new)
             {
               $buffer = array_merge($buffer, $new);
@@ -259,7 +257,7 @@ class Swift_CharacterStream_ArrayCharacterStream
       }
     }
     while ($has_datas);
-
+    
     fclose($fp);
   }
 
@@ -289,7 +287,7 @@ class Swift_CharacterStream_ArrayCharacterStream
     $this->_array = array();
     $this->_array_size = 0;
   }
-
+  
   private function _reloadBuffer($fp, $len)
   {
     if (!feof($fp) && ($bytes = fread($fp, $len)) !== false)
@@ -303,7 +301,7 @@ class Swift_CharacterStream_ArrayCharacterStream
     }
     return false;
   }
-
+  
   private static function _initializeMaps()
   {
     if (!isset(self::$_charMap))
old mode 100644 (file)
new mode 100755 (executable)
index 470a6af..57c3fb7
@@ -18,8 +18,6 @@
 
  */
 
-//@require 'Swift/CharacterStream.php';
-//@require 'Swift/OutputByteStream.php';
 
 
 /**
@@ -53,49 +51,49 @@ Class Swift_CharacterStream_NgCharacterStream
    * @access private
    */
   private $_charset;
-
+  
   /**
    * The datas stored as is
    *
    * @var string
    */
   private $_datas = "";
-
+  
   /**
    * Number of bytes in the stream
    *
    * @var int
    */
   private $_datasSize = 0;
-
+  
   /**
    * Map
    *
    * @var mixed
    */
   private $_map;
-
+  
   /**
    * Map Type
    *
    * @var int
    */
   private $_mapType = 0;
-
+  
   /**
    * Number of characters in the stream
    *
    * @var int
    */
   private $_charCount = 0;
-
+  
   /**
    * Position in the stream
    *
    * @var unknown_type
    */
   private $_currentPos = 0;
-
+  
   /**
    * The constructor
    *
@@ -108,7 +106,7 @@ Class Swift_CharacterStream_NgCharacterStream
     $this->setCharacterReaderFactory($factory);
     $this->setCharacterSet($charset);
   }
-
+  
   /* -- Changing parameters of the stream -- */
 
   /**
@@ -144,7 +142,7 @@ Class Swift_CharacterStream_NgCharacterStream
        $this->_currentPos = 0;
        $this->_datasSize = 0;
   }
-
+  
   /**
    * @see Swift_CharacterStream::importByteStream()
    *
@@ -158,7 +156,7 @@ Class Swift_CharacterStream_NgCharacterStream
     while(false!==($read = $os->read($blocks)))
       $this->write($read);
   }
-
+  
   /**
    * @see Swift_CharacterStream::importString()
    *
@@ -169,7 +167,7 @@ Class Swift_CharacterStream_NgCharacterStream
     $this->flushContents();
     $this->write($string);
   }
-
+  
   /**
    * @see Swift_CharacterStream::read()
    *
@@ -195,7 +193,7 @@ Class Swift_CharacterStream_NgCharacterStream
             $len);
         $this->_currentPos += $length;
         break;
-
+      
       case Swift_CharacterReader::MAP_TYPE_INVALID:
         $end = $this->_currentPos + $length;
         $end = $end > $this->_charCount
@@ -214,7 +212,7 @@ Class Swift_CharacterStream_NgCharacterStream
           }
         }
         break;
-
+      
       case Swift_CharacterReader::MAP_TYPE_POSITIONS:
         $end = $this->_currentPos + $length;
         $end = $end > $this->_charCount
@@ -241,7 +239,7 @@ Class Swift_CharacterStream_NgCharacterStream
        }
        return $ret;
   }
-
+  
   /**
    * @see Swift_CharacterStream::readBytes()
    *
@@ -258,7 +256,7 @@ Class Swift_CharacterStream_NgCharacterStream
        }
        return false;
   }
-
+  
   /**
    * @see Swift_CharacterStream::setPointer()
    *
@@ -271,7 +269,7 @@ Class Swift_CharacterStream_NgCharacterStream
        }
        $this->_currentPos = $charOffset;
   }
-
+  
   /**
    * @see Swift_CharacterStream::write()
    *
@@ -297,4 +295,4 @@ Class Swift_CharacterStream_NgCharacterStream
       $this->_datasSize=strlen($this->_datas);
     }
   }
-}
+}
\ No newline at end of file
diff --git a/typo3/contrib/swiftmailer/classes/Swift/ConfigurableSpool.php b/typo3/contrib/swiftmailer/classes/Swift/ConfigurableSpool.php
new file mode 100755 (executable)
index 0000000..27a9b6c
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+/*
+ * This file is part of SwiftMailer.
+ * (c) 2009 Fabien Potencier <fabien.potencier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Base class for Spools (implements time and message limits).
+ * @package Swift
+ * @author  Fabien Potencier
+ */
+abstract class Swift_ConfigurableSpool implements Swift_Spool
+{
+  /** The maximum number of messages to send per flush */
+  private $_message_limit;
+  
+  /** The time limit per flush */
+  private $_time_limit;
+  
+  /**
+   * Sets the maximum number of messages to send per flush.
+   * @param int $limit The limit
+   */
+  public function setMessageLimit($limit)
+  {
+    $this->_message_limit = (int) $limit;
+  }
+  
+  /**
+   * Gets the maximum number of messages to send per flush.
+   * @return int The limit
+   */
+  public function getMessageLimit()
+  {
+    return $this->_message_limit;
+  }
+  
+  /**
+   * Sets the time limit (in seconds) per flush.
+   * @param int $limit The limit
+   */
+  public function setTimeLimit($limit)
+  {
+    $this->_time_limit = (int) $limit;
+  }
+  
+  /**
+   * Gets the time limit (in seconds) per flush.
+   * @return int The limit
+   */
+  public function getTimeLimit()
+  {
+    return $this->_time_limit;
+  }
+}
old mode 100644 (file)
new mode 100755 (executable)
index 9077b91..066811e
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/DependencyException.php';
 
 /**
  * Dependency Injection container.
  */
 class Swift_DependencyContainer
 {
-
+  
   /** Constant for literal value types */
   const TYPE_VALUE = 0x0001;
-
+  
   /** Constant for new instance types */
   const TYPE_INSTANCE = 0x0010;
-
+  
   /** Constant for shared instance types */
   const TYPE_SHARED = 0x0100;
-
+  
   /** Constant for aliases */
   const TYPE_ALIAS = 0x1000;
-
+  
   /** Singleton instance */
   private static $_instance = null;
-
+  
   /** The data container */
   private $_store = array();
-
+  
   /** The current endpoint in the data container */
   private $_endPoint;
-
+  
   /**
    * Constructor should not be used.
    * Use {@link getInstance()} instead.
    */
   public function __construct() { }
-
+  
   /**
    * Returns a singleton of the DependencyContainer.
    * @return Swift_DependencyContainer
@@ -57,7 +56,7 @@ class Swift_DependencyContainer
     }
     return self::$_instance;
   }
-
+  
   /**
    * List the names of all items stored in the Container.
    * @return array
@@ -66,7 +65,7 @@ class Swift_DependencyContainer
   {
     return array_keys($this->_store);
   }
-
+  
   /**
    * Test if an item is registered in this container with the given name.
    * @param string $itemName
@@ -78,7 +77,7 @@ class Swift_DependencyContainer
     return array_key_exists($itemName, $this->_store)
       && isset($this->_store[$itemName]['lookupType']);
   }
-
+  
   /**
    * Lookup the item with the given $itemName.
    * @param string $itemName
@@ -94,7 +93,7 @@ class Swift_DependencyContainer
         'Cannot lookup dependency "' . $itemName . '" since it is not registered.'
         );
     }
-
+    
     switch ($this->_store[$itemName]['lookupType'])
     {
       case self::TYPE_ALIAS:
@@ -107,7 +106,7 @@ class Swift_DependencyContainer
         return $this->_createSharedInstance($itemName);
     }
   }
-
+  
   /**
    * Create an array of arguments passed to the constructor of $itemName.
    * @param string $itemName
@@ -122,7 +121,7 @@ class Swift_DependencyContainer
     }
     return $args;
   }
-
+  
   /**
    * Register a new dependency with $itemName.
    * This method returns the current DependencyContainer instance because it
@@ -139,7 +138,7 @@ class Swift_DependencyContainer
     $this->_endPoint =& $this->_store[$itemName];
     return $this;
   }
-
+  
   /**
    * Specify the previously registered item as a literal value.
    * {@link register()} must be called before this will work.
@@ -154,7 +153,7 @@ class Swift_DependencyContainer
     $endPoint['value'] = $value;
     return $this;
   }
-
+  
   /**
    * Specify the previously registered item as an alias of another item.
    * @param string $lookup
@@ -167,7 +166,7 @@ class Swift_DependencyContainer
     $endPoint['ref'] = $lookup;
     return $this;
   }
-
+  
   /**
    * Specify the previously registered item as a new instance of $className.
    * {@link register()} must be called before this will work.
@@ -185,7 +184,7 @@ class Swift_DependencyContainer
     $endPoint['className'] = $className;
     return $this;
   }
-
+  
   /**
    * Specify the previously registered item as a shared instance of $className.
    * {@link register()} must be called before this will work.
@@ -199,11 +198,11 @@ class Swift_DependencyContainer
     $endPoint['className'] = $className;
     return $this;
   }
-
+  
   /**
    * Specify a list of injected dependencies for the previously registered item.
    * This method takes an array of lookup names.
-   *
+   * 
    * @param array $lookups
    * @return Swift_DependencyContainer
    * @see addConstructorValue(), addConstructorLookup()
@@ -218,11 +217,11 @@ class Swift_DependencyContainer
     }
     return $this;
   }
-
+  
   /**
    * Specify a literal (non looked up) value for the constructor of the
    * previously registered item.
-   *
+   * 
    * @param mixed $value
    * @return Swift_DependencyContainer
    * @see withDependencies(), addConstructorLookup()
@@ -237,11 +236,11 @@ class Swift_DependencyContainer
     $endPoint['args'][] = array('type' => 'value', 'item' => $value);
     return $this;
   }
-
+  
   /**
    * Specify a dependency lookup for the constructor of the previously
    * registered item.
-   *
+   * 
    * @param string $lookup
    * @return Swift_DependencyContainer
    * @see withDependencies(), addConstructorValue()
@@ -256,21 +255,21 @@ class Swift_DependencyContainer
     $endPoint['args'][] = array('type' => 'lookup', 'item' => $lookup);
     return $this;
   }
-
+  
   // -- Private methods
-
+  
   /** Get the literal value with $itemName */
   private function _getValue($itemName)
   {
     return $this->_store[$itemName]['value'];
   }
-
+  
   /** Resolve an alias to another item */
   private function _createAlias($itemName)
   {
     return $this->lookup($this->_store[$itemName]['ref']);
   }
-
+  
   /** Create a fresh instance of $itemName */
   private function _createNewInstance($itemName)
   {
@@ -286,7 +285,7 @@ class Swift_DependencyContainer
       return $reflector->newInstance();
     }
   }
-
+  
   /** Create and register a shared instance of $itemName */
   private function _createSharedInstance($itemName)
   {
@@ -296,7 +295,7 @@ class Swift_DependencyContainer
     }
     return $this->_store[$itemName]['instance'];
   }
-
+  
   /** Get the current endpoint in the store */
   private function &_getEndPoint()
   {
@@ -308,7 +307,7 @@ class Swift_DependencyContainer
     }
     return $this->_endPoint;
   }
-
+  
   /** Get an argument list with dependencies resolved */
   private function _resolveArgs(array $args)
   {
@@ -327,7 +326,7 @@ class Swift_DependencyContainer
     }
     return $resolved;
   }
-
+  
   /** Resolve a single dependency with an collections */
   private function _lookupRecursive($item)
   {
@@ -345,5 +344,5 @@ class Swift_DependencyContainer
       return $this->lookup($item);
     }
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 31b3fb8..7622aac
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/SwiftException.php';
 
 /**
  * DependencyException thrown when a requested dependeny is missing.
@@ -17,7 +16,7 @@
  */
 class Swift_DependencyException extends Swift_SwiftException
 {
-
+  
   /**
    * Create a new DependencyException with $message.
    * @param string $message
@@ -26,5 +25,5 @@ class Swift_DependencyException extends Swift_SwiftException
   {
     parent::__construct($message);
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index a8d04f4..122a625
@@ -8,9 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Attachment.php';
-//@require 'Swift/DependencyContainer.php';
-//@require 'Swift/ByteStream/FileByteStream.php';
 
 /**
  * An embedded file, in a multipart message.
@@ -20,7 +17,7 @@
  */
 class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile
 {
-
+  
   /**
    * Create a new EmbeddedFile.
    * Details may be optionally provided to the constructor.
@@ -36,7 +33,7 @@ class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile
       Swift_DependencyContainer::getInstance()
         ->createDependenciesFor('mime.embeddedfile')
       );
-
+    
     $this->setBody($data);
     $this->setFilename($filename);
     if ($contentType)
@@ -44,7 +41,7 @@ class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile
       $this->setContentType($contentType);
     }
   }
-
+  
   /**
    * Create a new EmbeddedFile.
    * @param string|Swift_OutputByteStream $data
@@ -57,7 +54,7 @@ class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile
   {
     return new self($data, $filename, $contentType);
   }
-
+  
   /**
    * Create a new EmbeddedFile from a filesystem path.
    * @param string $path
@@ -69,5 +66,5 @@ class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile
       new Swift_ByteStream_FileByteStream($path)
       );
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 7c3239e..3db403f
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/CharsetObserver.php';
 
 /**
  * Interface for all Encoder schemes.
@@ -18,7 +17,7 @@
  */
 interface Swift_Encoder extends Swift_Mime_CharsetObserver
 {
-
+  
   /**
    * Encode a given string to produce an encoded string.
    * @param string $string
@@ -28,5 +27,5 @@ interface Swift_Encoder extends Swift_Mime_CharsetObserver
    */
   public function encodeString($string, $firstLineOffset = 0,
     $maxLineLength = 0);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index a14bf25..ba62c8d
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Encoder.php';
 
 /**
  * Handles Base 64 Encoding in Swift Mailer.
@@ -18,7 +17,7 @@
  */
 class Swift_Encoder_Base64Encoder implements Swift_Encoder
 {
-
+  
   /**
    * Takes an unencoded string and produces a Base64 encoded string from it.
    * Base64 encoded strings have a maximum line length of 76 characters.
@@ -36,10 +35,10 @@ class Swift_Encoder_Base64Encoder implements Swift_Encoder
     {
       $maxLineLength = 76;
     }
-
+    
     $encodedString = base64_encode($string);
     $firstLine = '';
-
+    
     if (0 != $firstLineOffset)
     {
       $firstLine = substr(
@@ -49,15 +48,15 @@ class Swift_Encoder_Base64Encoder implements Swift_Encoder
         $encodedString, $maxLineLength - $firstLineOffset
         );
     }
-
+    
     return $firstLine . trim(chunk_split($encodedString, $maxLineLength, "\r\n"));
   }
-
+  
   /**
    * Does nothing.
    */
   public function charsetChanged($charset)
   {
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 6914f6c..ab11303
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Encoder.php';
-//@require 'Swift/CharacterStream.php';
 
 /**
  * Handles Quoted Printable (QP) Encoding in Swift Mailer.
@@ -40,7 +38,7 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder
    * @var string[]
    * @access protected
    */
-  protected static $_qpMap = array(
+  protected $_qpMap = array(
     0   => '=00', 1   => '=01', 2   => '=02', 3   => '=03', 4   => '=04',
     5   => '=05', 6   => '=06', 7   => '=07', 8   => '=08', 9   => '=09',
     10  => '=0A', 11  => '=0B', 12  => '=0C', 13  => '=0D', 14  => '=0E',
@@ -100,7 +98,7 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder
    * @var string[]
    * @access protected
    */
-  protected static $_safeMap = array();
+  protected $_safeMap = array();
 
   /**
    * Creates a new QpEncoder for the given CharacterStream.
@@ -111,13 +109,10 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder
     Swift_StreamFilter $filter = null)
   {
     $this->_charStream = $charStream;
-    if (empty(self::$_safeMap))
+    foreach (array_merge(
+      array(0x09, 0x20), range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte)
     {
-      foreach (array_merge(
-        array(0x09, 0x20), range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte)
-      {
-        self::$_safeMap[$byte] = chr($byte);
-      }
+      $this->_safeMap[$byte] = chr($byte);
     }
     $this->_filter = $filter;
   }
@@ -215,14 +210,14 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder
     $size=0;
     foreach ($bytes as $b)
     {
-      if (isset(self::$_safeMap[$b]))
+      if (isset($this->_safeMap[$b]))
       {
-        $ret .= self::$_safeMap[$b];
+        $ret .= $this->_safeMap[$b];
         ++$size;
       }
       else
       {
-        $ret .= self::$_qpMap[$b];
+        $ret .= $this->_qpMap[$b];
         $size+=3;
       }
     }
@@ -255,7 +250,7 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder
     {
       case 0x09:
       case 0x20:
-        $string = substr_replace($string, self::$_qpMap[$end], -1);
+        $string = substr_replace($string, $this->_qpMap[$end], -1);
     }
     return $string;
   }
old mode 100644 (file)
new mode 100755 (executable)
index 107c68e..c4c5725
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Encoder.php';
-//@require 'Swift/CharacterStream.php';
 
 /**
  * Handles RFC 2231 specified Encoding in Swift Mailer.
  */
 class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder
 {
-
+  
   /**
    * A character stream to use when reading a string as characters instead of bytes.
    * @var Swift_CharacterStream
    * @access private
    */
   private $_charStream;
-
+  
   /**
    * Creates a new Rfc2231Encoder using the given character stream instance.
    * @param Swift_CharacterStream
@@ -35,7 +33,7 @@ class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder
   {
     $this->_charStream = $charStream;
   }
-
+  
   /**
    * Takes an unencoded string and produces a string encoded according to
    * RFC 2231 from it.
@@ -50,17 +48,17 @@ class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder
     $lines = array(); $lineCount = 0;
     $lines[] = '';
     $currentLine =& $lines[$lineCount++];
-
+    
     if (0 >= $maxLineLength)
     {
       $maxLineLength = 75;
     }
-
+    
     $this->_charStream->flushContents();
     $this->_charStream->importString($string);
-
+    
     $thisLineLength = $maxLineLength - $firstLineOffset;
-
+    
     while (false !== $char = $this->_charStream->read(4))
     {
       $encodedChar = rawurlencode($char);
@@ -73,10 +71,10 @@ class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder
       }
       $currentLine .= $encodedChar;
     }
-
+    
     return implode("\r\n", $lines);
   }
-
+  
   /**
    * Updates the charset used.
    * @param string $charset
@@ -85,5 +83,5 @@ class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder
   {
     $this->_charStream->setCharacterSet($charset);
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 2a9d764..369b9a5
@@ -8,63 +8,62 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/DependencyContainer.php';
 
 /**
  * Provides quick access to each encoding type.
- *
+ * 
  * @package Swift
  * @subpackage Encoder
  * @author Chris Corbyn
  */
 class Swift_Encoding
 {
-
+  
   /**
    * Get the Encoder that provides 7-bit encoding.
-   *
+   * 
    * @return Swift_Mime_ContentEncoder
    */
   public static function get7BitEncoding()
   {
     return self::_lookup('mime.7bitcontentencoder');
   }
-
+  
   /**
    * Get the Encoder that provides 8-bit encoding.
-   *
+   * 
    * @return Swift_Mime_ContentEncoder
    */
   public static function get8BitEncoding()
   {
     return self::_lookup('mime.8bitcontentencoder');
   }
-
+  
   /**
    * Get the Encoder that provides Quoted-Printable (QP) encoding.
-   *
+   * 
    * @return Swift_Mime_ContentEncoder
    */
   public static function getQpEncoding()
   {
     return self::_lookup('mime.qpcontentencoder');
   }
-
+  
   /**
    * Get the Encoder that provides Base64 encoding.
-   *
+   * 
    * @return Swift_Mime_ContentEncoder
    */
   public static function getBase64Encoding()
   {
     return self::_lookup('mime.base64contentencoder');
   }
-
+  
   // -- Private Static Methods
-
+  
   private static function _lookup($key)
   {
     return Swift_DependencyContainer::getInstance()->lookup($key);
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 57b06eb..11b808c
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventObject.php';
-//@require 'Swift/Transport.php';
 
 /**
  * Generated when a command is sent over an SMTP connection.
  */
 class Swift_Events_CommandEvent extends Swift_Events_EventObject
 {
-
+  
   /**
    * The command sent to the server.
    * @var string
    */
   private $_command;
-
+  
   /**
    * An array of codes which a successful response will contain.
    * @var int[]
    */
   private $_successCodes = array();
-
+  
   /**
    * Create a new CommandEvent for $source with $command.
    * @param Swift_Transport $source
@@ -45,7 +43,7 @@ class Swift_Events_CommandEvent extends Swift_Events_EventObject
     $this->_command = $command;
     $this->_successCodes = $successCodes;
   }
-
+  
   /**
    * Get the command which was sent to the server.
    * @return string
@@ -54,7 +52,7 @@ class Swift_Events_CommandEvent extends Swift_Events_EventObject
   {
     return $this->_command;
   }
-
+  
   /**
    * Get the numeric response codes which indicate success for this command.
    * @return int[]
@@ -63,5 +61,5 @@ class Swift_Events_CommandEvent extends Swift_Events_EventObject
   {
     return $this->_successCodes;
   }
-
-}
+  
+}
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 79cd61b..0964577
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventListener.php';
-//@require 'Swift/Events/CommandEvent.php';
 
 /**
  * Listens for Transports to send commands to the server.
  */
 interface Swift_Events_CommandListener extends Swift_Events_EventListener
 {
-
+  
   /**
    * Invoked immediately following a command being sent.
    * @param Swift_Events_ResponseEvent $evt
    */
   public function commandSent(Swift_Events_CommandEvent $evt);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index e3ca3f6..c6726a7
 
 /**
  * The minimum interface for an Event.
- *
+ * 
  * @package Swift
  * @subpackage Events
  * @author Chris Corbyn
  */
 interface Swift_Events_Event
 {
-
+  
   /**
    * Get the source object of this event.
    * @return object
    */
   public function getSource();
-
+  
   /**
    * Prevent this Event from bubbling any further up the stack.
    * @param boolean $cancel, optional
    */
   public function cancelBubble($cancel = true);
-
+  
   /**
    * Returns true if this Event will not bubble any further up the stack.
    * @return boolean
    */
   public function bubbleCancelled();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index d9b57c0..a0e5e60
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventListener.php';
-//@require 'Swift/Event.php';
 
 /**
  * Interface for the EventDispatcher which handles the event dispatching layer.
@@ -19,7 +17,7 @@
  */
 interface Swift_Events_EventDispatcher
 {
-
+  
   /**
    * Create a new SendEvent for $source and $message.
    * @param Swift_Transport $source
@@ -28,7 +26,7 @@ interface Swift_Events_EventDispatcher
    */
   public function createSendEvent(Swift_Transport $source,
     Swift_Mime_Message $message);
-
+  
   /**
    * Create a new CommandEvent for $source and $command.
    * @param Swift_Transport $source
@@ -38,7 +36,7 @@ interface Swift_Events_EventDispatcher
    */
   public function createCommandEvent(Swift_Transport $source,
     $command, $successCodes = array());
-
+  
   /**
    * Create a new ResponseEvent for $source and $response.
    * @param Swift_Transport $source
@@ -48,14 +46,14 @@ interface Swift_Events_EventDispatcher
    */
   public function createResponseEvent(Swift_Transport $source,
     $response, $valid);
-
+  
   /**
    * Create a new TransportChangeEvent for $source.
    * @param Swift_Transport $source
    * @return Swift_Events_TransportChangeEvent
    */
   public function createTransportChangeEvent(Swift_Transport $source);
-
+  
   /**
    * Create a new TransportExceptionEvent for $source.
    * @param Swift_Transport $source
@@ -64,18 +62,18 @@ interface Swift_Events_EventDispatcher
    */
   public function createTransportExceptionEvent(Swift_Transport $source,
     Swift_TransportException $ex);
-
+  
   /**
    * Bind an event listener to this dispatcher.
    * @param Swift_Events_EventListener $listener
    */
   public function bindEventListener(Swift_Events_EventListener $listener);
-
+  
   /**
    * Dispatch the given Event to all suitable listeners.
    * @param Swift_Events_EventObject $evt
    * @param string $target method
    */
   public function dispatchEvent(Swift_Events_EventObject $evt, $target);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 4537b06..ba6aac0
@@ -8,24 +8,23 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/Event.php';
 
 /**
  * A base Event which all Event classes inherit from.
- *
+ * 
  * @package Swift
  * @subpackage Events
  * @author Chris Corbyn
  */
 class Swift_Events_EventObject implements Swift_Events_Event
 {
-
+  
   /** The source of this Event */
   private $_source;
-
+  
   /** The state of this Event (should it bubble up the stack?) */
   private $_bubbleCancelled = false;
-
+  
   /**
    * Create a new EventObject originating at $source.
    * @param object $source
@@ -34,7 +33,7 @@ class Swift_Events_EventObject implements Swift_Events_Event
   {
     $this->_source = $source;
   }
-
+  
   /**
    * Get the source object of this event.
    * @return object
@@ -43,7 +42,7 @@ class Swift_Events_EventObject implements Swift_Events_Event
   {
     return $this->_source;
   }
-
+  
   /**
    * Prevent this Event from bubbling any further up the stack.
    * @param boolean $cancel, optional
@@ -52,7 +51,7 @@ class Swift_Events_EventObject implements Swift_Events_Event
   {
     $this->_bubbleCancelled = $cancel;
   }
-
+  
   /**
    * Returns true if this Event will not bubble any further up the stack.
    * @return boolean
@@ -61,5 +60,5 @@ class Swift_Events_EventObject implements Swift_Events_Event
   {
     return $this->_bubbleCancelled;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 7a5545f..7ce0ad6
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventObject.php';
 
 /**
  * Generated when a response is received on a SMTP connection.
  */
 class Swift_Events_ResponseEvent extends Swift_Events_EventObject
 {
-
+  
   /**
    * The overall result.
    * @var boolean
    */
   private $_valid;
-
+  
   /**
    * The response received from the server.
    * @var string
    */
   private $_response;
-
+  
   /**
    * Create a new ResponseEvent for $source and $response.
    * @param Swift_Transport $source
@@ -43,7 +42,7 @@ class Swift_Events_ResponseEvent extends Swift_Events_EventObject
     $this->_response = $response;
     $this->_valid = $valid;
   }
-
+  
   /**
    * Get the response which was received from the server.
    * @return string
@@ -52,7 +51,7 @@ class Swift_Events_ResponseEvent extends Swift_Events_EventObject
   {
     return $this->_response;
   }
-
+  
   /**
    * Get the success status of this Event.
    * @return boolean
@@ -61,5 +60,5 @@ class Swift_Events_ResponseEvent extends Swift_Events_EventObject
   {
     return $this->_valid;
   }
-
-}
+  
+}
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 950f872..d2fc8e4
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventListener.php';
-//@require 'Swift/Events/ResponseEvent.php';
 
 /**
  * Listens for responses from a remote SMTP server.
  */
 interface Swift_Events_ResponseListener extends Swift_Events_EventListener
 {
-
+  
   /**
    * Invoked immediately following a response coming back.
    * @param Swift_Events_ResponseEvent $evt
    */
   public function responseReceived(Swift_Events_ResponseEvent $evt);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 447044e..c2b5ca4
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventObject.php';
 
 /**
  * Generated when a message is being sent.
  */
 class Swift_Events_SendEvent extends Swift_Events_EventObject
 {
-
+  
   /** Sending has yet to occur */
   const RESULT_PENDING = 0x0001;
-
+  
   /** Sending was successful */
   const RESULT_SUCCESS = 0x0010;
-
+  
   /** Sending worked, but there were some failures */
   const RESULT_TENTATIVE = 0x0100;
-
+  
   /** Sending failed */
   const RESULT_FAILED = 0x1000;
-
+  
   /**
    * The Message being sent.
    * @var Swift_Mime_Message
    */
   private $_message;
-
+  
   /**
    * The Transport used in sending.
    * @var Swift_Transport
    */
   private $_transport;
-
+  
   /**
    * Any recipients which failed after sending.
    * @var string[]
    */
-  private $failedRecipients = array();
-
+  private $_failedRecipients = array();
+  
   /**
    * The overall result as a bitmask from the class constants.
    * @var int
    */
   private $result;
-
+  
   /**
    * Create a new SendEvent for $source and $message.
    * @param Swift_Transport $source
@@ -67,7 +66,7 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject
     $this->_message = $message;
     $this->_result = self::RESULT_PENDING;
   }
-
+  
   /**
    * Get the Transport used to send the Message.
    * @return Swift_Transport
@@ -76,7 +75,7 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject
   {
     return $this->getSource();
   }
-
+  
   /**
    * Get the Message being sent.
    * @return Swift_Mime_Message
@@ -85,7 +84,7 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject
   {
     return $this->_message;
   }
-
+  
   /**
    * Set the array of addresses that failed in sending.
    * @param array $recipients
@@ -94,7 +93,7 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject
   {
     $this->_failedRecipients = $recipients;
   }
-
+  
   /**
    * Get an recipient addresses which were not accepted for delivery.
    * @return string[]
@@ -103,7 +102,7 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject
   {
     return $this->_failedRecipients;
   }
-
+  
   /**
    * Set the result of sending.
    * @return int
@@ -112,7 +111,7 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject
   {
     $this->_result = $result;
   }
-
+  
   /**
    * Get the result of this Event.
    * The return value is a bitmask from
@@ -123,5 +122,5 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject
   {
     return $this->_result;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index f22faa4..1ce187c
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventListener.php';
-//@require 'Swift/Events/SendEvent.php';
 
 /**
  * Listens for Messages being sent from within the Transport system.
  */
 interface Swift_Events_SendListener extends Swift_Events_EventListener
 {
-
+  
   /**
    * Invoked immediately before the Message is sent.
    * @param Swift_Events_SendEvent $evt
    */
   public function beforeSendPerformed(Swift_Events_SendEvent $evt);
-
+  
   /**
    * Invoked immediately after the Message is sent.
    * @param Swift_Events_SendEvent $evt
    */
   public function sendPerformed(Swift_Events_SendEvent $evt);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 57165e1..1d9237c
@@ -8,34 +8,26 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventDispatcher.php';
-//@require 'Swift/Events/EventListener.php';
-//@require 'Swift/Events/EventObject.php';
-//@require 'Swift/Events/CommandEvent.php';
-//@require 'Swift/Events/ResponseEvent.php';
-//@require 'Swift/Events/SendEvent.php';
-//@require 'Swift/Events/TransportChangeEvent.php';
-//@require 'Swift/Events/TransportExceptionEvent.php';
 
 /**
  * The EventDispatcher which handles the event dispatching layer.
- *
+ * 
  * @package Swift
  * @subpackage Events
  * @author Chris Corbyn
  */
 class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
 {
-
+  
   /** A map of event types to their associated listener types */
   private $_eventMap = array();
-
+  
   /** Event listeners bound to this dispatcher */
   private $_listeners = array();
-
+  
   /** Listeners queued to have an Event bubbled up the stack to them */
   private $_bubbleQueue = array();
-
+  
   /**
    * Create a new EventDispatcher.
    */
@@ -49,10 +41,10 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
       'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener'
       );
   }
-
+  
   /**
    * Create a new SendEvent for $source and $message.
-   *
+   * 
    * @param Swift_Transport $source
    * @param Swift_Mime_Message
    * @return Swift_Events_SendEvent
@@ -62,10 +54,10 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
   {
     return new Swift_Events_SendEvent($source, $message);
   }
-
+  
   /**
    * Create a new CommandEvent for $source and $command.
-   *
+   * 
    * @param Swift_Transport $source
    * @param string $command That will be executed
    * @param array $successCodes That are needed
@@ -76,10 +68,10 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
   {
     return new Swift_Events_CommandEvent($source, $command, $successCodes);
   }
-
+  
   /**
    * Create a new ResponseEvent for $source and $response.
-   *
+   * 
    * @param Swift_Transport $source
    * @param string $response
    * @param boolean $valid If the response is valid
@@ -90,10 +82,10 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
   {
     return new Swift_Events_ResponseEvent($source, $response, $valid);
   }
-
+  
   /**
    * Create a new TransportChangeEvent for $source.
-   *
+   * 
    * @param Swift_Transport $source
    * @return Swift_Events_TransportChangeEvent
    */
@@ -101,10 +93,10 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
   {
     return new Swift_Events_TransportChangeEvent($source);
   }
-
+  
   /**
    * Create a new TransportExceptionEvent for $source.
-   *
+   * 
    * @param Swift_Transport $source
    * @param Swift_TransportException $ex
    * @return Swift_Events_TransportExceptionEvent
@@ -114,10 +106,10 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
   {
     return new Swift_Events_TransportExceptionEvent($source, $ex);
   }
-
+  
   /**
    * Bind an event listener to this dispatcher.
-   *
+   * 
    * @param Swift_Events_EventListener $listener
    */
   public function bindEventListener(Swift_Events_EventListener $listener)
@@ -132,10 +124,10 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
     }
     $this->_listeners[] = $listener;
   }
-
+  
   /**
    * Dispatch the given Event to all suitable listeners.
-   *
+   * 
    * @param Swift_Events_EventObject $evt
    * @param string $target method
    */
@@ -144,9 +136,9 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
     $this->_prepareBubbleQueue($evt);
     $this->_bubble($evt, $target);
   }
-
+  
   // -- Private methods
-
+  
   /** Queue listeners on a stack ready for $evt to be bubbled up it */
   private function _prepareBubbleQueue(Swift_Events_EventObject $evt)
   {
@@ -161,7 +153,7 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
       }
     }
   }
-
+  
   /** Bubble $evt up the stack calling $target() on each listener */
   private function _bubble(Swift_Events_EventObject $evt, $target)
   {
@@ -171,5 +163,5 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher
       $this->_bubble($evt, $target);
     }
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index c1cb304..e57176a
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventObject.php';
 
 /**
  * Generated when the state of a Transport is changed (i.e. stopped/started).
@@ -18,7 +17,7 @@
  */
 class Swift_Events_TransportChangeEvent extends Swift_Events_EventObject
 {
-
+  
   /**
    * Get the Transport.
    * @return Swift_Transport
@@ -27,5 +26,5 @@ class Swift_Events_TransportChangeEvent extends Swift_Events_EventObject
   {
     return $this->getSource();
   }
-
-}
+  
+}
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index b578394..9c028f0
@@ -8,46 +8,44 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventListener.php';
-//@require 'Swift/Events/TransportChangeEvent.php';
 
 /**
  * Listens for changes within the Transport system.
- *
+ * 
  * @package Swift
  * @subpackage Events
- *
+ * 
  * @author Chris Corbyn
  */
 interface Swift_Events_TransportChangeListener extends Swift_Events_EventListener
 {
-
+  
   /**
    * Invoked just before a Transport is started.
-   *
+   * 
    * @param Swift_Events_TransportChangeEvent $evt
    */
   public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt);
-
+  
   /**
    * Invoked immediately after the Transport is started.
-   *
+   * 
    * @param Swift_Events_TransportChangeEvent $evt
    */
   public function transportStarted(Swift_Events_TransportChangeEvent $evt);
-
+  
   /**
    * Invoked just before a Transport is stopped.
-   *
+   * 
    * @param Swift_Events_TransportChangeEvent $evt
    */
   public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt);
-
+  
   /**
    * Invoked immediately after the Transport is stopped.
-   *
+   * 
    * @param Swift_Events_TransportChangeEvent $evt
    */
   public function transportStopped(Swift_Events_TransportChangeEvent $evt);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 92540e4..1544328
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventObject.php';
-//@require 'Swift/TransportException.php';
 
 /**
  * Generated when a TransportException is thrown from the Transport system.
  */
 class Swift_Events_TransportExceptionEvent extends Swift_Events_EventObject
 {
-
+  
   /**
    * The Exception thrown.
    * @var Swift_TransportException
    */
   private $_exception;
-
+  
   /**
    * Create a new TransportExceptionEvent for $transport.
    * @param Swift_Transport $transport
@@ -37,7 +35,7 @@ class Swift_Events_TransportExceptionEvent extends Swift_Events_EventObject
     parent::__construct($transport);
     $this->_exception = $ex;
   }
-
+  
   /**
    * Get the TransportException thrown.
    * @return Swift_TransportException
@@ -46,5 +44,5 @@ class Swift_Events_TransportExceptionEvent extends Swift_Events_EventObject
   {
     return $this->_exception;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 0b32db0..92266af
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Events/EventListener.php';
-//@require 'Swift/Events/TransportExceptionEvent.php';
 
 /**
  * Listens for Exceptions thrown from within the Transport system.
 interface Swift_Events_TransportExceptionListener
   extends Swift_Events_EventListener
 {
-
+  
   /**
    * Invoked as a TransportException is thrown in the Transport system.
    * @param Swift_Events_TransportExceptionEvent $evt
    */
   public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 97dc49e..5767119
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Transport/FailoverTransport.php';
-//@require 'Swift/DependencyContainer.php';
 
 /**
  * Contains a list of redundant Transports so when one fails, the next is used.
@@ -19,7 +17,7 @@
  */
 class Swift_FailoverTransport extends Swift_Transport_FailoverTransport
 {
-
+  
   /**
    * Creates a new FailoverTransport with $transports.
    * @param array $transports
@@ -31,10 +29,10 @@ class Swift_FailoverTransport extends Swift_Transport_FailoverTransport
       Swift_DependencyContainer::getInstance()
         ->createDependenciesFor('transport.failover')
       );
-
+    
     $this->setTransports($transports);
   }
-
+  
   /**
    * Create a new FailoverTransport instance.
    * @param string $transports
@@ -44,5 +42,5 @@ class Swift_FailoverTransport extends Swift_Transport_FailoverTransport
   {
     return new self($transports);
   }
-
+  
 }
diff --git a/typo3/contrib/swiftmailer/classes/Swift/FileSpool.php b/typo3/contrib/swiftmailer/classes/Swift/FileSpool.php
new file mode 100755 (executable)
index 0000000..76c144e
--- /dev/null
@@ -0,0 +1,208 @@
+<?php
+
+/*
+ * This file is part of SwiftMailer.
+ * (c) 2009 Fabien Potencier <fabien.potencier@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Stores Messages on the filesystem.
+ * @package Swift
+ * @author  Fabien Potencier
+ * @author Xavier De Cock <xdecock@gmail.com>
+ */
+class Swift_FileSpool extends Swift_ConfigurableSpool
+{
+  /** The spool directory */
+  private $_path;
+  
+  /**
+   * File WriteRetry Limit
+   * @var int
+   */
+  private $_retryLimit=10;
+  
+  /**
+   * Create a new FileSpool.
+   * @param string $path
+   * @throws Swift_IoException
+   */
+  public function __construct($path)
+  {
+    $this->_path = $path;
+    
+    if (!file_exists($this->_path))
+    {
+      if (!mkdir($this->_path, 0777, true))
+      {
+        throw new Swift_IoException('Unable to create Path ['.$this->_path.']');
+      }
+    }
+  }
+  
+  /**
+   * Tests if this Spool mechanism has started.
+   *
+   * @return boolean
+   */
+  public function isStarted()
+  {
+    return true;
+  }
+  
+  /**
+   * Starts this Spool mechanism.
+   */
+  public function start()
+  {
+  }
+  
+  /**
+   * Stops this Spool mechanism.
+   */
+  public function stop()
+  {
+  }
+  
+  /**
+   * Allow to manage the enqueuing retry limit.
+   * Default, is ten and allows over 64^20 different fileNames 
+   * 
+   * @param integer $limit
+   */
+  public function setRetryLimit($limit)
+  {
+    $this->_retryLimit=$limit;
+  }
+  
+  /**
+   * Queues a message.
+   * @param Swift_Mime_Message $message The message to store
+   * @return boolean
+   * @throws Swift_IoException
+   */
+  public function queueMessage(Swift_Mime_Message $message)
+  {
+    $ser = serialize($message);
+    $fileName=$this->_path.'/'.$this->getRandomString(10);
+    for ($i = 0; $i < $this->_retryLimit; ++$i) 
+    {
+      /* We try an exclusive creation of the file
+       * This is an atomic operation, it avoid locking mechanism
+       */
+      $fp=fopen($fileName.'.message', 'x');
+      if ($fp) 
+      {
+        fwrite($fp, $ser);
+        fclose($fp);
+        
+        return;
+      } 
+      else 
+      {
+        /* The file allready exists, we try a longer fileName
+         */
+        $fileName.=$this->getRandomString(1);
+      }
+    }
+    
+    throw new Swift_IoException('Unable to create a file for enqueuing Message');
+  }
+  
+  /**
+   * Execute a recovery if for anyreason a process is sending for too long
+   * 
+   * @param int $timeout in second Defaults is for very slow smtp responses
+   */
+  public function recover($timeout=900)
+  {
+    foreach (new DirectoryIterator($this->_path) as $file)
+    {
+      $file = $file->getRealPath();
+
+      if (substr($file, -16)=='.message.sending')
+      {
+        $lockedtime=filectime($file);
+        if ((time()-$lockedtime)>$timeout) 
+        {
+          rename($file, substr($file, 0, -8));
+        }
+      }
+    }    
+  }
+  
+  /**
+   * Sends messages using the given transport instance.
+   *
+   * @param Swift_Transport $transport         A transport instance
+   * @param string[]        &$failedRecipients An array of failures by-reference
+   *
+   * @return int The number of sent emails
+   */
+  public function flushQueue(Swift_Transport $transport, &$failedRecipients = null)
+  {
+    if (!$transport->isStarted())
+    {
+      $transport->start();
+    }
+
+    $failedRecipients = (array) $failedRecipients;
+    $count = 0;
+    $time = time();
+    foreach (new DirectoryIterator($this->_path) as $file)
+    {
+      $file = $file->getRealPath();
+
+      if (substr($file, -8) != '.message')
+      {
+        continue;
+      }
+
+      /* We try a rename, it's an atomic operation, and avoid locking the file */
+      if (rename($file, $file.'.sending')) 
+      {
+        $message = unserialize(file_get_contents($file.'.sending'));
+
+        $count += $transport->send($message, $failedRecipients);
+
+        unlink($file.'.sending');
+      }
+      else 
+      {
+        /* This message has just been catched by another process */
+        continue;
+      }
+
+      if ($this->getMessageLimit() && $count >= $this->getMessageLimit())
+      {
+        break;
+      }
+
+      if ($this->getTimeLimit() && (time() - $time) >= $this->getTimeLimit())
+      {
+        break;
+      }
+    }
+
+    return $count;
+  }
+  
+  /**
+   * Returns a random string needed to generate a fileName for the queue.
+   * @param int $count
+   */
+  protected function getRandomString($count) {
+    // This string MUST stay FS safe, avoid special chars
+    $base="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-.";
+    $ret='';
+    $strlen=strlen($base);
+    for ($i=0; $i<$count; ++$i) 
+    {
+      $ret.=$base[((int)rand(0,$strlen-1))];
+    }
+    return $ret;
+  }
+}
old mode 100644 (file)
new mode 100755 (executable)
index 4c9410a..56bf36e
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/OutputByteStream.php';
 
 /**
  * An OutputByteStream which specifically reads from a file.
  */
 interface Swift_FileStream extends Swift_OutputByteStream
 {
-
+  
   /**
    * Get the complete path to the file.
    * @return string
    */
   public function getPath();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 2fdf820..4ca5f40
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/StreamFilter.php';
 
 /**
  * Allows StreamFilters to operate on a stream.
  */
 interface Swift_Filterable
 {
-
+  
   /**
    * Add a new StreamFilter, referenced by $key.
    * @param Swift_StreamFilter $filter
    * @param string $key
    */
   public function addFilter(Swift_StreamFilter $filter, $key);
-
+  
   /**
    * Remove an existing filter using $key.
    * @param string $key
    */
   public function removeFilter($key);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 3ce88fb..3baa79e
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Image.php';
-//@require 'Swift/ByteStream/FileByteStream.php';
 
 /**
  * An image, embedded in a multipart message.
@@ -19,7 +17,7 @@
  */
 class Swift_Image extends Swift_EmbeddedFile
 {
-
+  
   /**
    * Create a new EmbeddedFile.
    * Details may be optionally provided to the constructor.
@@ -32,7 +30,7 @@ class Swift_Image extends Swift_EmbeddedFile
   {
     parent::__construct($data, $filename, $contentType);
   }
-
+  
   /**
    * Create a new Image.
    * @param string|Swift_OutputByteStream $data
@@ -45,7 +43,7 @@ class Swift_Image extends Swift_EmbeddedFile
   {
     return new self($data, $filename, $contentType);
   }
-
+  
   /**
    * Create a new Image from a filesystem path.
    * @param string $path
@@ -58,5 +56,5 @@ class Swift_Image extends Swift_EmbeddedFile
       );
     return $image;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 4f7382f..e8f45f4
  */
 interface Swift_InputByteStream
 {
-
+  
   /**
    * Writes $bytes to the end of the stream.
-   *
+   * 
    * Writing may not happen immediately if the stream chooses to buffer.  If
    * you want to write these bytes with immediate effect, call {@link commit()}
    * after calling write().
-   *
+   * 
    * This method returns the sequence ID of the write (i.e. 1 for first, 2 for
    * second, etc etc).
    *
@@ -34,39 +34,39 @@ interface Swift_InputByteStream
    * @throws Swift_IoException
    */
   public function write($bytes);
-
+  
   /**
    * For any bytes that are currently buffered inside the stream, force them
    * off the buffer.
-   *
+   * 
    * @throws Swift_IoException
    */
   public function commit();
-
+  
   /**
    * Attach $is to this stream.
    * The stream acts as an observer, receiving all data that is written.
    * All {@link write()} and {@link flushBuffers()} operations will be mirrored.
-   *
+   * 
    * @param Swift_InputByteStream $is
    */
   public function bind(Swift_InputByteStream $is);
-
+  
   /**
    * Remove an already bound stream.
    * If $is is not bound, no errors will be raised.
    * If the stream currently has any buffered data it will be written to $is
    * before unbinding occurs.
-   *
+   * 
    * @param Swift_InputByteStream $is
    */
   public function unbind(Swift_InputByteStream $is);
-
+  
   /**
    * Flush the contents of the stream (empty it) and set the internal pointer
    * to the beginning.
    * @throws Swift_IoException
    */
   public function flushBuffers();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index b081942..7c2a9bb
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/SwiftException.php';
 
 /**
  * I/O Exception class.
@@ -17,7 +16,7 @@
  */
 class Swift_IoException extends Swift_SwiftException
 {
-
+  
   /**
    * Create a new IoException with $message.
    * @param string $message
@@ -26,5 +25,5 @@ class Swift_IoException extends Swift_SwiftException
   {
     parent::__construct($message);
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 34e0362..e3e8f0c
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStream.php';
 
 /**
  * Provides a mechanism for storing data using two keys.
  */
 interface Swift_KeyCache
 {
-
+  
   /** Mode for replacing existing cached data */
   const MODE_WRITE = 1;
-
+  
   /** Mode for appending data to the end of existing cached data */
   const MODE_APPEND = 2;
-
+  
   /**
    * Set a string into the cache under $itemKey for the namespace $nsKey.
    * @param string $nsKey
@@ -35,7 +33,7 @@ interface Swift_KeyCache
    * @see MODE_WRITE, MODE_APPEND
    */
   public function setString($nsKey, $itemKey, $string, $mode);
-
+  
   /**
    * Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
    * @param string $nsKey
@@ -46,7 +44,7 @@ interface Swift_KeyCache
    */
   public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os,
     $mode);
-
+  
   /**
    * Provides a ByteStream which when written to, writes data to $itemKey.
    * NOTE: The stream will always write in append mode.
@@ -58,7 +56,7 @@ interface Swift_KeyCache
    */
   public function getInputByteStream($nsKey, $itemKey,
     Swift_InputByteStream $is = null);
-
+  
   /**
    * Get data back out of the cache as a string.
    * @param string $nsKey
@@ -66,7 +64,7 @@ interface Swift_KeyCache
    * @return string
    */
   public function getString($nsKey, $itemKey);
-
+  
   /**
    * Get data back out of the cache as a ByteStream.
    * @param string $nsKey
@@ -74,7 +72,7 @@ interface Swift_KeyCache
    * @param Swift_InputByteStream $is to write the data to
    */
   public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is);
-
+  
   /**
    * Check if the given $itemKey exists in the namespace $nsKey.
    * @param string $nsKey
@@ -82,18 +80,18 @@ interface Swift_KeyCache
    * @return boolean
    */
   public function hasKey($nsKey, $itemKey);
-
+  
   /**
    * Clear data for $itemKey in the namespace $nsKey if it exists.
    * @param string $nsKey
    * @param string $itemKey
    */
   public function clearKey($nsKey, $itemKey);
-
+  
   /**
    * Clear all data in the namespace $nsKey if it exists.
    * @param string $nsKey
    */
   public function clearAll($nsKey);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 1241a78..72d7842
@@ -8,11 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/KeyCache.php';
-//@require 'Swift/KeyCacheInputStream.php';
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStrean.php';
-//@require 'Swift/SwiftException.php';
 
 /**
  * A basic KeyCache backed by an array.
  */
 class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
 {
-
+  
   /**
    * Cache contents.
    * @var array
    * @access private
    */
   private $_contents = array();
-
+  
   /**
    * An InputStream for cloning.
    * @var Swift_KeyCache_KeyCacheInputStream
    * @access private
    */
   private $_stream;
-
+  
   /**
    * Create a new ArrayKeyCache with the given $stream for cloning to make
    * InputByteStreams.
@@ -46,7 +41,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
   {
     $this->_stream = $stream;
   }
-
+  
   /**
    * Set a string into the cache under $itemKey for the namespace $nsKey.
    * @param string $nsKey
@@ -77,7 +72,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
           );
     }
   }
-
+  
   /**
    * Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
    * @param string $nsKey
@@ -111,7 +106,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
           );
     }
   }
-
+  
   /**
    * Provides a ByteStream which when written to, writes data to $itemKey.
    * NOTE: The stream will always write in append mode.
@@ -132,7 +127,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
     }
     return $is;
   }
-
+  
   /**
    * Get data back out of the cache as a string.
    * @param string $nsKey
@@ -147,7 +142,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
       return $this->_contents[$nsKey][$itemKey];
     }
   }
-
+  
   /**
    * Get data back out of the cache as a ByteStream.
    * @param string $nsKey
@@ -159,7 +154,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
     $this->_prepareCache($nsKey);
     $is->write($this->getString($nsKey, $itemKey));
   }
-
+  
   /**
    * Check if the given $itemKey exists in the namespace $nsKey.
    * @param string $nsKey
@@ -171,7 +166,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
     $this->_prepareCache($nsKey);
     return array_key_exists($itemKey, $this->_contents[$nsKey]);
   }
-
+  
   /**
    * Clear data for $itemKey in the namespace $nsKey if it exists.
    * @param string $nsKey
@@ -181,7 +176,7 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
   {
     unset($this->_contents[$nsKey][$itemKey]);
   }
-
+  
   /**
    * Clear all data in the namespace $nsKey if it exists.
    * @param string $nsKey
@@ -190,9 +185,9 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
   {
     unset($this->_contents[$nsKey]);
   }
-
+  
   // -- Private methods
-
+  
   /**
    * Initialize the namespace of $nsKey if needed.
    * @param string $nsKey
@@ -205,5 +200,5 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache
       $this->_contents[$nsKey] = array();
     }
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 599fd6c..7835079
@@ -8,12 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/KeyCache.php';
-//@require 'Swift/KeyCacheInputStream.php';
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStrean.php';
-//@require 'Swift/SwiftException.php';
-//@require 'Swift/IoException.php';
 
 /**
  * A KeyCache which streams to and from disk.
@@ -29,6 +23,9 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
 
   /** Signal to place pointer at end of file */
   const POSITION_END = 1;
+  
+  /** Signal to leave pointer in whatever position it currently is */
+  const POSITION_CURRENT = 2;
 
   /**
    * An InputStream for cloning.
@@ -68,7 +65,11 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
   {
     $this->_stream = $stream;
     $this->_path = $path;
-    $this->_quotes = get_magic_quotes_runtime();
+
+    if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1)
+    {
+      $this->_quotes = true;
+    }
   }
 
   /**
@@ -99,6 +100,7 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
         break;
     }
     fwrite($fp, $string);
+    $this->_freeHandle($nsKey, $itemKey);
   }
 
   /**
@@ -133,6 +135,7 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
     {
       fwrite($fp, $bytes);
     }
+    $this->_freeHandle($nsKey, $itemKey);
   }
 
   /**
@@ -171,7 +174,7 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
       $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START);
       if ($this->_quotes)
       {
-        set_magic_quotes_runtime(0);
+        ini_set('magic_quotes_runtime', 0);
       }
       $str = '';
       while (!feof($fp) && false !== $bytes = fread($fp, 8192))
@@ -180,8 +183,9 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
       }
       if ($this->_quotes)
       {
-        set_magic_quotes_runtime(1);
+        ini_set('magic_quotes_runtime', 1);
       }
+      $this->_freeHandle($nsKey, $itemKey);
       return $str;
     }
   }
@@ -199,7 +203,7 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
       $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START);
       if ($this->_quotes)
       {
-        set_magic_quotes_runtime(0);
+        ini_set('magic_quotes_runtime', 0);
       }
       while (!feof($fp) && false !== $bytes = fread($fp, 8192))
       {
@@ -207,8 +211,9 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
       }
       if ($this->_quotes)
       {
-        set_magic_quotes_runtime(1);
+        ini_set('magic_quotes_runtime', 1);
       }
+      $this->_freeHandle($nsKey, $itemKey);
     }
   }
 
@@ -232,11 +237,9 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
   {
     if ($this->hasKey($nsKey, $itemKey))
     {
-      $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END);
-      fclose($fp);
+      $this->_freeHandle($nsKey, $itemKey);
       unlink($this->_path . '/' . $nsKey . '/' . $itemKey);
     }
-    unset($this->_keys[$nsKey][$itemKey]);
   }
 
   /**
@@ -251,7 +254,10 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
       {
         $this->clearKey($nsKey, $itemKey);
       }
-      rmdir($this->_path . '/' . $nsKey);
+      if (is_dir($this->_path . '/' . $nsKey))
+      {
+        rmdir($this->_path . '/' . $nsKey);
+      }
       unset($this->_keys[$nsKey]);
     }
   }
@@ -286,21 +292,32 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache
    */
   private function _getHandle($nsKey, $itemKey, $position)
   {
-    if (!isset($this->_keys[$nsKey]) || !array_key_exists($itemKey, $this->_keys[$nsKey]))
+    if (!isset($this->_keys[$nsKey][$itemKey]))
     {
-      $fp = fopen($this->_path . '/' . $nsKey . '/' . $itemKey, 'w+b');
+      $openMode = $this->hasKey($nsKey, $itemKey)
+        ? 'r+b'
+        : 'w+b'
+        ;
+      $fp = fopen($this->_path . '/' . $nsKey . '/' . $itemKey, $openMode);
       $this->_keys[$nsKey][$itemKey] = $fp;
     }
     if (self::POSITION_START == $position)
     {
       fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_SET);
     }
-    else
+    elseif (self::POSITION_END == $position)
     {
       fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_END);
     }
     return $this->_keys[$nsKey][$itemKey];
   }
+  
+  private function _freeHandle($nsKey, $itemKey)
+  {
+    $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_CURRENT);
+    fclose($fp);
+    $this->_keys[$nsKey][$itemKey] = null;
+  }
 
   /**
    * Destructor.
diff --git a/typo3/contrib/swiftmailer/classes/Swift/KeyCache/DummyKeyCache.php b/typo3/contrib/swiftmailer/classes/Swift/KeyCache/DummyKeyCache.php
new file mode 100755 (executable)
index 0000000..5721c66
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+
+/*
+ A dummy KeyCache used to exclude cache layer from problems
+ This program is free software: you can 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, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * A basic KeyCache backed by an array.
+ * @package Swift
+ * @subpackage KeyCache
+ * @author Xavier De Cock <xdecock@gmail.com>
+ */
+class Swift_KeyCache_DummyKeyCache implements Swift_KeyCache
+{
+  /**
+   * Set a string into the cache under $itemKey for the namespace $nsKey.
+   * @param string $nsKey
+   * @param string $itemKey
+   * @param string $string
+   * @param int $mode
+   * @see MODE_WRITE, MODE_APPEND
+   */
+  public function setString($nsKey, $itemKey, $string, $mode)
+  {}
+  
+  /**
+   * Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
+   * @param string $nsKey
+   * @param string $itemKey
+   * @param Swift_OutputByteStream $os
+   * @param int $mode
+   * @see MODE_WRITE, MODE_APPEND
+   */
+  public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os,
+    $mode)
+  {}
+  
+  /**
+   * Provides a ByteStream which when written to, writes data to $itemKey.
+   * NOTE: The stream will always write in append mode.
+   * @param string $nsKey
+   * @param string $itemKey
+   * @return Swift_InputByteStream
+   */
+  public function getInputByteStream($nsKey, $itemKey,
+    Swift_InputByteStream $writeThrough = null)
+  {
+    return false;
+  }
+  
+  /**
+   * Get data back out of the cache as a string.
+   * @param string $nsKey
+   * @param string $itemKey
+   * @return string
+   */
+  public function getString($nsKey, $itemKey)
+  {
+    return false;
+  }
+  
+  /**
+   * Get data back out of the cache as a ByteStream.
+   * @param string $nsKey
+   * @param string $itemKey
+   * @param Swift_InputByteStream $is to write the data to
+   */
+  public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is)
+  {
+    return false;
+  }
+  
+  /**
+   * Check if the given $itemKey exists in the namespace $nsKey.
+   * @param string $nsKey
+   * @param string $itemKey
+   * @return boolean
+   */
+  public function hasKey($nsKey, $itemKey)
+  {
+    return false;
+  }
+  
+  /**
+   * Clear data for $itemKey in the namespace $nsKey if it exists.
+   * @param string $nsKey
+   * @param string $itemKey
+   */
+  public function clearKey($nsKey, $itemKey)
+  {}
+  
+  /**
+   * Clear all data in the namespace $nsKey if it exists.
+   * @param string $nsKey
+   */
+  public function clearAll($nsKey)
+  {}
+}
old mode 100644 (file)
new mode 100755 (executable)
index 10f80cf..f4a3f47
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/KeyCache.php';
-//@require 'Swift/InputByteStream.php';
 
 /**
  * Writes data to a KeyCache using a stream.
  */
 interface Swift_KeyCache_KeyCacheInputStream extends Swift_InputByteStream
 {
-
+  
   /**
    * Set the KeyCache to wrap.
    * @param Swift_KeyCache $keyCache
    */
   public function setKeyCache(Swift_KeyCache $keyCache);
-
+  
   /**
    * Set the nsKey which will be written to.
    * @param string $nsKey
    */
   public function setNsKey($nsKey);
-
+  
   /**
    * Set the itemKey which will be written to.
    * @param string $itemKey
    */
   public function setItemKey($itemKey);
-
+  
   /**
    * Specify a stream to write through for each write().
    * @param Swift_InputByteStream $is
    */
   public function setWriteThroughStream(Swift_InputByteStream $is);
-
+  
   /**
    * Any implementation should be cloneable, allowing the clone to access a
    * separate $nsKey and $itemKey.
    */
   public function __clone();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index f3c89a9..d75ab48
@@ -8,10 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/KeyCache.php';
-//@require 'Swift/KeyCacheInputStream.php';
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStrean.php';
 
 /**
  * A null KeyCache that does not cache at all.
@@ -21,7 +17,7 @@
  */
 class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
 {
-
+  
   /**
    * Set a string into the cache under $itemKey for the namespace $nsKey.
    * @param string $nsKey
@@ -33,7 +29,7 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
   public function setString($nsKey, $itemKey, $string, $mode)
   {
   }
-
+  
   /**
    * Set a ByteStream into the cache under $itemKey for the namespace $nsKey.
    * @param string $nsKey
@@ -46,7 +42,7 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
     $mode)
   {
   }
-
+  
   /**
    * Provides a ByteStream which when written to, writes data to $itemKey.
    * NOTE: The stream will always write in append mode.
@@ -58,7 +54,7 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
     Swift_InputByteStream $writeThrough = null)
   {
   }
-
+  
   /**
    * Get data back out of the cache as a string.
    * @param string $nsKey
@@ -68,7 +64,7 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
   public function getString($nsKey, $itemKey)
   {
   }
-
+  
   /**
    * Get data back out of the cache as a ByteStream.
    * @param string $nsKey
@@ -78,7 +74,7 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
   public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is)
   {
   }
-
+  
   /**
    * Check if the given $itemKey exists in the namespace $nsKey.
    * @param string $nsKey
@@ -89,7 +85,7 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
   {
     return false;
   }
-
+  
   /**
    * Clear data for $itemKey in the namespace $nsKey if it exists.
    * @param string $nsKey
@@ -98,7 +94,7 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
   public function clearKey($nsKey, $itemKey)
   {
   }
-
+  
   /**
    * Clear all data in the namespace $nsKey if it exists.
    * @param string $nsKey
@@ -106,5 +102,5 @@ class Swift_KeyCache_NullKeyCache implements Swift_KeyCache
   public function clearAll($nsKey)
   {
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 85adcc2..e9c90bf
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/KeyCache.php';
-//@require 'Swift/KeyCacheInputStream.php';
 
 /**
  * Writes data to a KeyCache using a stream.
 class Swift_KeyCache_SimpleKeyCacheInputStream
   implements Swift_KeyCache_KeyCacheInputStream
 {
-
+  
   /** The KeyCache being written to */
   private $_keyCache;
-
+  
   /** The nsKey of the KeyCache being written to */
   private $_nsKey;
-
+  
   /** The itemKey of the KeyCache being written to */
   private $_itemKey;
-
+  
   /** A stream to write through on each write() */
   private $_writeThrough = null;
-
+  
   /**
    * Set the KeyCache to wrap.
    * @param Swift_KeyCache $keyCache
@@ -41,7 +39,7 @@ class Swift_KeyCache_SimpleKeyCacheInputStream
   {
     $this->_keyCache = $keyCache;
   }
-
+  
   /**
    * Specify a stream to write through for each write().
    * @param Swift_InputByteStream $is
@@ -50,7 +48,7 @@ class Swift_KeyCache_SimpleKeyCacheInputStream
   {
     $this->_writeThrough = $is;
   }
-
+  
   /**
    * Writes $bytes to the end of the stream.
    * @param string $bytes
@@ -70,28 +68,28 @@ class Swift_KeyCache_SimpleKeyCacheInputStream
       $this->_writeThrough->write($bytes);
     }
   }
-
+  
   /**
    * Not used.
    */
   public function commit()
   {
   }
-
+  
   /**
    * Not used.
    */
   public function bind(Swift_InputByteStream $is)
   {
   }
-
+  
   /**
    * Not used.
    */
   public function unbind(Swift_InputByteStream $is)
   {
   }
-
+  
   /**
    * Flush the contents of the stream (empty it) and set the internal pointer
    * to the beginning.
@@ -100,7 +98,7 @@ class Swift_KeyCache_SimpleKeyCacheInputStream
   {
     $this->_keyCache->clearKey($this->_nsKey, $this->_itemKey);
   }
-
+  
   /**
    * Set the nsKey which will be written to.
    * @param string $nsKey
@@ -109,7 +107,7 @@ class Swift_KeyCache_SimpleKeyCacheInputStream
   {
     $this->_nsKey = $nsKey;
   }
-
+  
   /**
    * Set the itemKey which will be written to.
    * @param string $itemKey
@@ -118,7 +116,7 @@ class Swift_KeyCache_SimpleKeyCacheInputStream
   {
     $this->_itemKey = $itemKey;
   }
-
+  
   /**
    * Any implementation should be cloneable, allowing the clone to access a
    * separate $nsKey and $itemKey.
@@ -127,5 +125,5 @@ class Swift_KeyCache_SimpleKeyCacheInputStream
   {
     $this->_writeThrough = null;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index cb3dbeb..de3045a
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Transport/LoadBalancedTransport.php';
-//@require 'Swift/DependencyContainer.php';
 
 /**
  * Redudantly and rotationally uses several Transport implementations when sending.
@@ -19,7 +17,7 @@
  */
 class Swift_LoadBalancedTransport extends Swift_Transport_LoadBalancedTransport
 {
-
+  
   /**
    * Creates a new LoadBalancedTransport with $transports.
    * @param array $transports
@@ -31,10 +29,10 @@ class Swift_LoadBalancedTransport extends Swift_Transport_LoadBalancedTransport
       Swift_DependencyContainer::getInstance()
         ->createDependenciesFor('transport.loadbalanced')
       );
-
+    
     $this->setTransports($transports);
   }
-
+  
   /**
    * Create a new LoadBalancedTransport instance.
    * @param string $transports
@@ -44,5 +42,5 @@ class Swift_LoadBalancedTransport extends Swift_Transport_LoadBalancedTransport
   {
     return new self($transports);
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 8d4b677..dd8ccac
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Transport/MailTransport.php';
-//@require 'Swift/DependencyContainer.php';
 
 /**
  * Sends Messages using the mail() function.
@@ -19,7 +17,7 @@
  */
 class Swift_MailTransport extends Swift_Transport_MailTransport
 {
-
+  
   /**
    * Create a new MailTransport, optionally specifying $extraParams.
    * @param string $extraParams
@@ -31,10 +29,10 @@ class Swift_MailTransport extends Swift_Transport_MailTransport
       Swift_DependencyContainer::getInstance()
         ->createDependenciesFor('transport.mail')
       );
-
+    
     $this->setExtraParams($extraParams);
   }
-
+  
   /**
    * Create a new MailTransport instance.
    * @param string $extraParams To be passed to mail()
@@ -44,5 +42,5 @@ class Swift_MailTransport extends Swift_Transport_MailTransport
   {
     return new self($extraParams);
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 279a35b..a0561d3
@@ -8,26 +8,22 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Transport.php';
-//@require 'Swift/Mime/Message.php';
-//@require 'Swift/Mailer/RecipientIterator.php';
-//@require 'Swift/Events/EventListener.php';
 
 /**
  * Swift Mailer class.
- *
+ * 
  * @package Swift
  * @author Chris Corbyn
  */
 class Swift_Mailer
 {
-
+  
   /** The Transport used to send messages */
   private $_transport;
-
+  
   /**
    * Create a new Mailer using $transport for delivery.
-   *
+   * 
    * @param Swift_Transport $transport
    */
   public function __construct(Swift_Transport $transport)
@@ -37,7 +33,7 @@ class Swift_Mailer
 
   /**
    * Create a new Mailer instance.
-   *
+   * 
    * @param Swift_Transport $transport
    * @return Swift_Mailer
    */
@@ -47,113 +43,62 @@ class Swift_Mailer
   }
 
   /**
-   * Send the given Message like it would be sent in a mail client.
+   * Create a new class instance of one if the message services
+   * For example 'mimepart' would create a 'message.mimepart' instance
    *
+   * @param string $service
+   * @return object
+   */
+  public function createMessage($service = 'message')
+  {
+    return Swift_DependencyContainer::getInstance()
+      ->lookup('message.'.$service);
+  }
+
+  /**
+   * Send the given Message like it would be sent in a mail client.
+   * 
    * All recipients (with the exception of Bcc) will be able to see the other
    * recipients this message was sent to.
-   *
-   * If you need to send to each recipient without disclosing details about the
-   * other recipients see {@link batchSend()}.
-   *
-   * Recipient/sender data will be retreived from the Message object.
-   *
+   * 
+   * Recipient/sender data will be retrieved from the Message object.
+   * 
    * The return value is the number of recipients who were accepted for
    * delivery.
-   *
+   * 
    * @param Swift_Mime_Message $message
    * @param array &$failedRecipients, optional
    * @return int
-   * @see batchSend()
    */
   public function send(Swift_Mime_Message $message, &$failedRecipients = null)
   {
     $failedRecipients = (array) $failedRecipients;
-
+    
     if (!$this->_transport->isStarted())
     {
       $this->_transport->start();
     }
-
-    return $this->_transport->send($message, $failedRecipients);
-  }
-
-  /**
-   * Send the given Message to all recipients individually.
-   *
-   * This differs from {@link send()} in the way headers are presented to the
-   * recipient.  The only recipient in the "To:" field will be the individual
-   * recipient it was sent to.
-   *
-   * If an iterator is provided, recipients will be read from the iterator
-   * one-by-one, otherwise recipient data will be retreived from the Message
-   * object.
-   *
-   * Sender information is always read from the Message object.
-   *
-   * The return value is the number of recipients who were accepted for
-   * delivery.
-   *
-   * @param Swift_Mime_Message $message
-   * @param array &$failedRecipients, optional
-   * @param Swift_Mailer_RecipientIterator $it, optional
-   * @return int
-   * @see send()
-   */
-  public function batchSend(Swift_Mime_Message $message,
-    &$failedRecipients = null,
-    Swift_Mailer_RecipientIterator $it = null)
-  {
-    $failedRecipients = (array) $failedRecipients;
-
+    
     $sent = 0;
-    $to = $message->getTo();
-    $cc = $message->getCc();
-    $bcc = $message->getBcc();
-
-    if (!empty($cc))
-    {
-      $message->setCc(array());
-    }
-    if (!empty($bcc))
-    {
-      $message->setBcc(array());
-    }
-
-    //Use an iterator if set
-    if (isset($it))
+    
+    try
     {
-      while ($it->hasNext())
-      {
-        $message->setTo($it->nextRecipient());
-        $sent += $this->send($message, $failedRecipients);
-      }
+      $sent = $this->_transport->send($message, $failedRecipients);
     }
-    else
+    catch (Swift_RfcComplianceException $e)
     {
-      foreach ($to as $address => $name)
+      foreach ($message->getTo() as $address => $name)
       {
-        $message->setTo(array($address => $name));
-        $sent += $this->send($message, $failedRecipients);
+        $failedRecipients[] = $address;
       }
     }
-
-    $message->setTo($to);
-
-    if (!empty($cc))
-    {
-      $message->setCc($cc);
-    }
-    if (!empty($bcc))
-    {
-      $message->setBcc($bcc);
-    }
-
+    
     return $sent;
   }
-
+  
   /**
    * Register a plugin using a known unique key (e.g. myPlugin).
-   *
+   * 
    * @param Swift_Events_EventListener $plugin
    * @param string $key
    */
@@ -161,7 +106,7 @@ class Swift_Mailer
   {
     $this->_transport->registerPlugin($plugin);
   }
-
+  
   /**
    * The Transport used to send messages.
    * @return Swift_Transport
old mode 100644 (file)
new mode 100755 (executable)
index e31000a..c732ebb
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mailer/RecipientIterator.php';
 
 /**
  * Wraps a standard PHP array in an interator.
 class Swift_Mailer_ArrayRecipientIterator
   implements Swift_Mailer_RecipientIterator
 {
-
+  
   /**
    * The list of recipients.
    * @var array
    * @access private
    */
   private $_recipients = array();
-
+  
   /**
    * Create a new ArrayRecipientIterator from $recipients.
    * @param array $recipients
@@ -35,7 +34,7 @@ class Swift_Mailer_ArrayRecipientIterator
   {
     $this->_recipients = $recipients;
   }
-
+  
   /**
    * Returns true only if there are more recipients to send to.
    * @return boolean
@@ -44,7 +43,7 @@ class Swift_Mailer_ArrayRecipientIterator
   {
     return !empty($this->_recipients);
   }
-
+  
   /**
    * Returns an array where the keys are the addresses of recipients and the
    * values are the names.
@@ -55,5 +54,5 @@ class Swift_Mailer_ArrayRecipientIterator
   {
     return array_splice($this->_recipients, 0, 1);
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index c427dc0..2713841
  */
 interface Swift_Mailer_RecipientIterator
 {
-
+  
   /**
    * Returns true only if there are more recipients to send to.
    * @return boolean
    */
   public function hasNext();
-
+  
   /**
    * Returns an array where the keys are the addresses of recipients and the
    * values are the names.
@@ -30,5 +30,5 @@ interface Swift_Mailer_RecipientIterator
    * @return array
    */
   public function nextRecipient();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index b5e63fc..2f12ede
@@ -8,9 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/SimpleMessage.php';
-//@require 'Swift/MimePart.php';
-//@require 'Swift/DependencyContainer.php';
 
 /**
  * The Message class for building emails.
@@ -20,7 +17,7 @@
  */
 class Swift_Message extends Swift_Mime_SimpleMessage
 {
-
+  
   /**
    * Create a new Message.
    * Details may be optionally passed into the constructor.
@@ -37,7 +34,7 @@ class Swift_Message extends Swift_Mime_SimpleMessage
       Swift_DependencyContainer::getInstance()
         ->createDependenciesFor('mime.message')
       );
-
+    
     if (!isset($charset))
     {
       $charset = Swift_DependencyContainer::getInstance()
@@ -51,7 +48,7 @@ class Swift_Message extends Swift_Mime_SimpleMessage
       $this->setContentType($contentType);
     }
   }
-
+  
   /**
    * Create a new Message.
    * @param string $subject
@@ -65,7 +62,7 @@ class Swift_Message extends Swift_Mime_SimpleMessage
   {
     return new self($subject, $body, $contentType, $charset);
   }
-
+  
   /**
    * Add a MimePart to this Message.
    * @param string|Swift_OutputByteStream $body
@@ -78,5 +75,10 @@ class Swift_Message extends Swift_Mime_SimpleMessage
       $body, $contentType, $charset
       ));
   }
-
+  
+  public function __wakeup()
+  {
+    Swift_DependencyContainer::getInstance()->createDependenciesFor('mime.message');
+  }
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index d0012d4..e1c28f4
@@ -8,11 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/SimpleMimeEntity.php';
-//@require 'Swift/Mime/ContentEncoder.php';
-//@require 'Swift/Mime/HeaderSet.php';
-//@require 'Swift/FileStream.php';
-//@require 'Swift/KeyCache.php';
 
 /**
  * An attachment, in a multipart message.
  */
 class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
 {
-
+  
   /** Recognized MIME types */
   private $_mimeTypes = array();
-
+  
   /**
    * Create a new Attachment with $headers, $encoder and $cache.
    * @param Swift_Mime_HeaderSet $headers
    * @param Swift_Mime_ContentEncoder $encoder
    * @param Swift_KeyCache $cache
+   * @param Swift_Mime_Grammar $grammar
    * @param array $mimeTypes optional
    */
   public function __construct(Swift_Mime_HeaderSet $headers,
     Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache,
-    $mimeTypes = array())
+    Swift_Mime_Grammar $grammar, $mimeTypes = array())
   {
-    parent::__construct($headers, $encoder, $cache);
+    parent::__construct($headers, $encoder, $cache, $grammar);
     $this->setDisposition('attachment');
     $this->setContentType('application/octet-stream');
     $this->_mimeTypes = $mimeTypes;
   }
-
+  
   /**
    * Get the nesting level used for this attachment.
    * Always returns {@link LEVEL_MIXED}.
@@ -52,7 +48,7 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
   {
     return self::LEVEL_MIXED;
   }
-
+  
   /**
    * Get the Content-Disposition of this attachment.
    * By default attachments have a disposition of "attachment".
@@ -62,10 +58,11 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
   {
     return $this->_getHeaderFieldModel('Content-Disposition');
   }
-
+  
   /**
    * Set the Content-Disposition of this attachment.
    * @param string $disposition
+   * @return Swift_Mime_Attachment
    */
   public function setDisposition($disposition)
   {
@@ -77,7 +74,7 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
     }
     return $this;
   }
-
+  
   /**
    * Get the filename of this attachment when downloaded.
    * @return string
@@ -86,10 +83,11 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
   {
     return $this->_getHeaderParameter('Content-Disposition', 'filename');
   }
-
+  
   /**
    * Set the filename of this attachment.
    * @param string $filename
+   * @return Swift_Mime_Attachment
    */
   public function setFilename($filename)
   {
@@ -97,7 +95,7 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
     $this->_setHeaderParameter('Content-Type', 'name', $filename);
     return $this;
   }
-
+  
   /**
    * Get the file size of this attachment.
    * @return int
@@ -106,21 +104,23 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
   {
     return $this->_getHeaderParameter('Content-Disposition', 'size');
   }
-
+  
   /**
    * Set the file size of this attachment.
    * @param int $size
+   * @return Swift_Mime_Attachment
    */
   public function setSize($size)
   {
     $this->_setHeaderParameter('Content-Disposition', 'size', $size);
     return $this;
   }
-
+  
   /**
    * Set the file that this attachment is for.
    * @param Swift_FileStream $file
    * @param string $contentType optional
+   * @return Swift_Mime_Attachment
    */
   public function setFile(Swift_FileStream $file, $contentType = null)
   {
@@ -131,7 +131,7 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
       $extension = strtolower(substr(
         $file->getPath(), strrpos($file->getPath(), '.') + 1
         ));
-
+      
       if (array_key_exists($extension, $this->_mimeTypes))
       {
         $this->setContentType($this->_mimeTypes[$extension]);
@@ -139,5 +139,5 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity
     }
     return $this;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 5318681..c26009f
  */
 interface Swift_Mime_CharsetObserver
 {
-
+  
   /**
    * Notify this observer that the entity's charset has changed.
    * @param string $charset
    */
   public function charsetChanged($charset);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 737a3c8..6e02fec
@@ -8,9 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Encoder.php';
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStream.php';
 
 /**
  * Interface for all Transfer Encoding schemes.
@@ -20,7 +17,7 @@
  */
 interface Swift_Mime_ContentEncoder extends Swift_Encoder
 {
-
+  
   /**
    * Encode $in to $out.
    * @param Swift_OutputByteStream $os to read from
@@ -31,11 +28,11 @@ interface Swift_Mime_ContentEncoder extends Swift_Encoder
   public function encodeByteStream(
     Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0,
     $maxLineLength = 0);
-
+  
   /**
    * Get the MIME name of this content encoding scheme.
    * @return string
    */
   public function getName();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index ffe0f2c..04e1155
@@ -8,10 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/ContentEncoder.php';
-//@require 'Swift/Encoder/Base64Encoder.php';
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStream.php';
 
 /**
  * Handles Base 64 Transfer Encoding in Swift Mailer.
@@ -23,7 +19,7 @@ class Swift_Mime_ContentEncoder_Base64ContentEncoder
   extends Swift_Encoder_Base64Encoder
   implements Swift_Mime_ContentEncoder
 {
-
+  
   /**
    * Encode stream $in to stream $out.
    * @param Swift_OutputByteStream $in
@@ -39,15 +35,15 @@ class Swift_Mime_ContentEncoder_Base64ContentEncoder
     {
       $maxLineLength = 76;
     }
-
+    
     $remainder = 0;
-
+    
     while (false !== $bytes = $os->read(8190))
     {
       $encoded = base64_encode($bytes);
       $encodedTransformed = '';
       $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset;
-
+      
       while ($thisMaxLineLength < strlen($encoded))
       {
         $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength) . "\r\n";
@@ -56,18 +52,18 @@ class Swift_Mime_ContentEncoder_Base64ContentEncoder
         $thisMaxLineLength = $maxLineLength;
         $remainder = 0;
       }
-
+      
       if (0 < $remainingLength = strlen($encoded))
       {
         $remainder += $remainingLength;
         $encodedTransformed .= $encoded;
         $encoded = null;
       }
-
+      
       $is->write($encodedTransformed);
     }
   }
-
+  
   /**
    * Get the name of this encoding scheme.
    * Returns the string 'base64'.
@@ -77,5 +73,5 @@ class Swift_Mime_ContentEncoder_Base64ContentEncoder
   {
     return 'base64';
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index f64aacd..7f5ad08
@@ -8,9 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/ContentEncoder.php';
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/OutputByteStream.php';
 
 /**
  * Handles binary/7/8-bit Transfer Encoding in Swift Mailer.
 class Swift_Mime_ContentEncoder_PlainContentEncoder
   implements Swift_Mime_ContentEncoder
 {
-
+  
   /**
    * The name of this encoding scheme (probably 7bit or 8bit).
    * @var string
    * @access private
    */
   private $_name;
-
+  
   /**
    * True if canonical transformations should be done.
    * @var boolean
    * @access private
    */
   private $_canonical;
-
+  
   /**
    * Creates a new PlainContentEncoder with $name (probably 7bit or 8bit).
    * @param string $name
@@ -46,7 +43,7 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
     $this->_name = $name;
     $this->_canonical = $canonical;
   }
-
+  
   /**
    * Encode a given string to produce an encoded string.
    * @param string $string
@@ -63,7 +60,7 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
     }
     return $this->_safeWordWrap($string, $maxLineLength, "\r\n");
   }
-
+  
   /**
    * Encode stream $in to stream $out.
    * @param Swift_OutputByteStream $in
@@ -87,7 +84,7 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
       $lastLinePos = strrpos($wrapped, "\r\n");
       $leftOver = substr($wrapped, $lastLinePos);
       $wrapped = substr($wrapped, 0, $lastLinePos);
-
+      
       $is->write($wrapped);
     }
     if (strlen($leftOver))
@@ -95,7 +92,7 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
       $is->write($leftOver);
     }
   }
-
+  
   /**
    * Get the name of this encoding scheme.
    * @return string
@@ -104,16 +101,16 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
   {
     return $this->_name;
   }
-
+  
   /**
    * Not used.
    */
   public function charsetChanged($charset)
   {
   }
-
+  
   // -- Private methods
-
+  
   /**
    * A safer (but weaker) wordwrap for unicode.
    * @param string $string
@@ -128,20 +125,20 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
     {
       return $string;
     }
-
+    
     $originalLines = explode($le, $string);
-
+    
     $lines = array();
     $lineCount = 0;
-
+    
     foreach ($originalLines as $originalLine)
     {
       $lines[] = '';
       $currentLine =& $lines[$lineCount++];
-
+      
       //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine);
       $chunks = preg_split('/(?<=\s)/', $originalLine);
-
+      
       foreach ($chunks as $chunk)
       {
         if (0 != strlen($currentLine)
@@ -153,10 +150,10 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
         $currentLine .= $chunk;
       }
     }
-
+    
     return implode("\r\n", $lines);
   }
-
+  
   /**
    * Canonicalize string input (fix CRLF).
    * @param string $string
@@ -171,5 +168,5 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder
       $string
       );
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 067fb9a..87bcefc
@@ -8,11 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/ContentEncoder.php';
-//@require 'Swift/Encoder/QpEncoder.php';
-//@require 'Swift/InputByteStrean.php';
-//@require 'Swift/OutputByteStream.php';
-//@require 'Swift/CharacterStream.php';
 
 /**
  * Handles Quoted Printable (QP) Transfer Encoding in Swift Mailer.
@@ -28,11 +23,16 @@ class Swift_Mime_ContentEncoder_QpContentEncoder extends Swift_Encoder_QpEncoder
    * Creates a new QpContentEncoder for the given CharacterStream.
    * @param Swift_CharacterStream $charStream to use for reading characters
    * @param Swift_StreamFilter $filter if canonicalization should occur
+   * @param boolean $dotEscape if dot stuffing workaround must be enabled
    */
   public function __construct(Swift_CharacterStream $charStream,
-    Swift_StreamFilter $filter = null)
+    Swift_StreamFilter $filter = null, $dotEscape=false)
   {
     parent::__construct($charStream, $filter);
+    if ($dotEscape) {
+      /* Encode . as =2e for buggy remote servers */
+      unset($this->_safeMap[0x2e]);
+    }
   }
 
   /**
@@ -58,7 +58,7 @@ class Swift_Mime_ContentEncoder_QpContentEncoder extends Swift_Encoder_QpEncoder
 
     $this->_charStream->flushContents();
     $this->_charStream->importByteStream($os);
-
+    
     $currentLine = '';
     $prepend = '';
     $size=$lineLen=0;
old mode 100644 (file)
new mode 100755 (executable)
index c29e445..529de7f
@@ -8,10 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Attachment.php';
-//@require 'Swift/Mime/ContentEncoder.php';
-//@require 'Swift/KeyCache.php';
-//@require
 
 /**
  * An embedded file, in a multipart message.
  */
 class Swift_Mime_EmbeddedFile extends Swift_Mime_Attachment
 {
-
+  
   /**
    * Creates a new Attachment with $headers and $encoder.
    * @param Swift_Mime_HeaderSet $headers
    * @param Swift_Mime_ContentEncoder $encoder
    * @param Swift_KeyCache $cache
+   * @param Swift_Mime_Grammar $grammar
    * @param array $mimeTypes optional
    */
   public function __construct(Swift_Mime_HeaderSet $headers,
     Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache,
-    $mimeTypes = array())
+    Swift_Mime_Grammar $grammar, $mimeTypes = array())
   {
-    parent::__construct($headers, $encoder, $cache, $mimeTypes);
+    parent::__construct($headers, $encoder, $cache, $grammar, $mimeTypes);
     $this->setDisposition('inline');
     $this->setId($this->getId());
   }
-
+  
   /**
    * Get the nesting level of this EmbeddedFile.
    * Returns {@link LEVEL_RELATED}.
@@ -47,5 +44,5 @@ class Swift_Mime_EmbeddedFile extends Swift_Mime_Attachment
   {
     return self::LEVEL_RELATED;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 4d444b9..021cabd
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/ContentEncoder.php';
 
 /**
  * Observes changes for a Mime entity's ContentEncoder.
  */
 interface Swift_Mime_EncodingObserver
 {
-
+  
   /**
    * Notify this observer that the observed entity's ContentEncoder has changed.
    * @param Swift_Mime_ContentEncoder $encoder
    */
   public function encoderChanged(Swift_Mime_ContentEncoder $encoder);
-
+  
 }
diff --git a/typo3/contrib/swiftmailer/classes/Swift/Mime/Grammar.php b/typo3/contrib/swiftmailer/classes/Swift/Mime/Grammar.php
new file mode 100755 (executable)
index 0000000..e3f7d30
--- /dev/null
@@ -0,0 +1,163 @@
+<?php
+
+/*
+ * This file is part of SwiftMailer.
+ * (c) 2004-2009 Chris Corbyn
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+/**
+ * Defines the grammar to use for validation, implements the RFC 2822 (and friends) ABNF grammar definitions.
+ * @package Swift
+ * @subpackage Mime
+ * @author Fabien Potencier
+ * @author Chris Corbyn
+ */
+class Swift_Mime_Grammar
+{
+  /**
+   * Special characters used in the syntax which need to be escaped.
+   * @var string[]
+   * @access private
+   */
+  private $_specials = array();
+
+  /**
+   * Tokens defined in RFC 2822 (and some related RFCs).
+   * @var string[]
+   * @access private
+   */
+  private $_grammar = array();
+  
+  /**
+   * Initialize some RFC 2822 (and friends) ABNF grammar definitions.
+   * @access protected
+   */
+  public function __construct()
+  {
+    $this->_specials = array(
+      '(', ')', '<', '>', '[', ']',
+      ':', ';', '@', ',', '.', '"'
+      );
+    
+    /*** Refer to RFC 2822 for ABNF grammar ***/
+    
+    //All basic building blocks
+    $this->_grammar['NO-WS-CTL'] = '[\x01-\x08\x0B\x0C\x0E-\x19\x7F]';
+    $this->_grammar['WSP'] = '[ \t]';
+    $this->_grammar['CRLF'] = '(?:\r\n)';
+    $this->_grammar['FWS'] = '(?:(?:' . $this->_grammar['WSP'] . '*' .
+        $this->_grammar['CRLF'] . ')?' . $this->_grammar['WSP'] . ')';
+    $this->_grammar['text'] = '[\x00-\x08\x0B\x0C\x0E-\x7F]';
+    $this->_grammar['quoted-pair'] = '(?:\\\\' . $this->_grammar['text'] . ')';
+    $this->_grammar['ctext'] = '(?:' . $this->_grammar['NO-WS-CTL'] .
+        '|[\x21-\x27\x2A-\x5B\x5D-\x7E])';
+    //Uses recursive PCRE (?1) -- could be a weak point??
+    $this->_grammar['ccontent'] = '(?:' . $this->_grammar['ctext'] . '|' .
+        $this->_grammar['quoted-pair'] . '|(?1))';
+    $this->_grammar['comment'] = '(\((?:' . $this->_grammar['FWS'] . '|' .
+        $this->_grammar['ccontent']. ')*' . $this->_grammar['FWS'] . '?\))';
+    $this->_grammar['CFWS'] = '(?:(?:' . $this->_grammar['FWS'] . '?' .
+        $this->_grammar['comment'] . ')*(?:(?:' . $this->_grammar['FWS'] . '?' .
+        $this->_grammar['comment'] . ')|' . $this->_grammar['FWS'] . '))';
+    $this->_grammar['qtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] .
+        '|[\x21\x23-\x5B\x5D-\x7E])';
+    $this->_grammar['qcontent'] = '(?:' . $this->_grammar['qtext'] . '|' .
+        $this->_grammar['quoted-pair'] . ')';
+    $this->_grammar['quoted-string'] = '(?:' . $this->_grammar['CFWS'] . '?"' .
+        '(' . $this->_grammar['FWS'] . '?' . $this->_grammar['qcontent'] . ')*' .
+        $this->_grammar['FWS'] . '?"' . $this->_grammar['CFWS'] . '?)';
+    $this->_grammar['atext'] = '[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]';
+    $this->_grammar['atom'] = '(?:' . $this->_grammar['CFWS'] . '?' .
+        $this->_grammar['atext'] . '+' . $this->_grammar['CFWS'] . '?)';
+    $this->_grammar['dot-atom-text'] = '(?:' . $this->_grammar['atext'] . '+' .
+        '(\.' . $this->_grammar['atext'] . '+)*)';
+    $this->_grammar['dot-atom'] = '(?:' . $this->_grammar['CFWS'] . '?' .
+        $this->_grammar['dot-atom-text'] . '+' . $this->_grammar['CFWS'] . '?)';
+    $this->_grammar['word'] = '(?:' . $this->_grammar['atom'] . '|' .
+        $this->_grammar['quoted-string'] . ')';
+    $this->_grammar['phrase'] = '(?:' . $this->_grammar['word'] . '+?)';
+    $this->_grammar['no-fold-quote'] = '(?:"(?:' . $this->_grammar['qtext'] .
+        '|' . $this->_grammar['quoted-pair'] . ')*")';
+    $this->_grammar['dtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] .
+        '|[\x21-\x5A\x5E-\x7E])';
+    $this->_grammar['no-fold-literal'] = '(?:\[(?:' . $this->_grammar['dtext'] .
+        '|' . $this->_grammar['quoted-pair'] . ')*\])';
+    
+    //Message IDs
+    $this->_grammar['id-left'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' .
+        $this->_grammar['no-fold-quote'] . ')';
+    $this->_grammar['id-right'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' .
+        $this->_grammar['no-fold-literal'] . ')';
+    
+    //Addresses, mailboxes and paths
+    $this->_grammar['local-part'] = '(?:' . $this->_grammar['dot-atom'] . '|' .
+        $this->_grammar['quoted-string'] . ')';
+    $this->_grammar['dcontent'] = '(?:' . $this->_grammar['dtext'] . '|' .
+        $this->_grammar['quoted-pair'] . ')';
+    $this->_grammar['domain-literal'] = '(?:' . $this->_grammar['CFWS'] . '?\[(' .
+        $this->_grammar['FWS'] . '?' . $this->_grammar['dcontent'] . ')*?' .
+        $this->_grammar['FWS'] . '?\]' . $this->_grammar['CFWS'] . '?)';
+    $this->_grammar['domain'] = '(?:' . $this->_grammar['dot-atom'] . '|' .
+        $this->_grammar['domain-literal'] . ')';
+    $this->_grammar['addr-spec'] = '(?:' . $this->_grammar['local-part'] . '@' .
+        $this->_grammar['domain'] . ')';
+  }
+  
+  /**
+   * Get the grammar defined for $name token.
+   * @param string $name execatly as written in the RFC
+   * @return string
+   */
+  public function getDefinition($name)
+  {
+    if (array_key_exists($name, $this->_grammar))
+    {
+      return $this->_grammar[$name];
+    }
+    else
+    {
+      throw new Swift_RfcComplianceException(
+        "No such grammar '" . $name . "' defined."
+        );
+    }
+  }
+  
+  /**
+   * Returns the tokens defined in RFC 2822 (and some related RFCs).
+   * @return array
+   */
+  public function getGrammarDefinitions()
+  {
+    return $this->_grammar;
+  }
+  
+  /**
+   * Returns the current special characters used in the syntax which need to be escaped.
+   * @return array
+   */
+  public function getSpecials()
+  {
+    return $this->_specials;
+  }
+  
+  /**
+   * Escape special characters in a string (convert to quoted-pairs).
+   * @param string $token
+   * @param string[] $include additonal chars to escape
+   * @param string[] $exclude chars from escaping
+   * @return string
+   */
+  public function escapeSpecials($token, $include = array(),
+    $exclude = array())
+  {
+    foreach (
+      array_merge(array('\\'), array_diff($this->_specials, $exclude), $include) as $char)
+    {
+      $token = str_replace($char, '\\' . $char, $token);
+    }
+    return $token;
+  }
+}
old mode 100644 (file)
new mode 100755 (executable)
index 318908d..38fc40c
  */
 interface Swift_Mime_Header
 {
-
+  
   /** Text headers */
   const TYPE_TEXT = 2;
-
+  
   /** Parameterized headers (text + params) */
   const TYPE_PARAMETERIZED = 6;
 
   /** Mailbox and address headers */
   const TYPE_MAILBOX = 8;
-
+  
   /** Date and time headers */
   const TYPE_DATE = 16;
-
+  
   /** Identification headers */
   const TYPE_ID = 32;
-
+  
   /** Address path headers */
   const TYPE_PATH = 64;
-
+  
   /**
    * Get the type of Header that this instance represents.
    * @return int
@@ -42,44 +42,44 @@ interface Swift_Mime_Header
    * @see TYPE_DATE, TYPE_ID, TYPE_PATH
    */
   public function getFieldType();
-
+  
   /**
    * Set the model for the field body.
    * The actual types needed will vary depending upon the type of Header.
    * @param mixed $model
    */
   public function setFieldBodyModel($model);
-
+  
   /**
    * Set the charset used when rendering the Header.
    * @param string $charset
    */
   public function setCharset($charset);
-
+  
   /**
    * Get the model for the field body.
    * The return type depends on the specifics of the Header.
    * @return mixed
    */
   public function getFieldBodyModel();
-
+  
   /**
    * Get the name of this header (e.g. Subject).
    * The name is an identifier and as such will be immutable.
    * @return string
    */
   public function getFieldName();
-
+  
   /**
    * Get the field body, prepared for folding into a final header value.
    * @return string
    */
   public function getFieldBody();
-
+  
   /**
    * Get this Header rendered as a compliant string.
    * @return string
    */
   public function toString();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 23764d8..023f367
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Encoder.php';
 
 /**
  * Interface for all Header Encoding schemes.
  */
 interface Swift_Mime_HeaderEncoder extends Swift_Encoder
 {
-
+  
   /**
    * Get the MIME name of this content encoding scheme.
    * @return string
    */
   public function getName();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 6b480f7..feaba98
@@ -22,7 +22,7 @@ class Swift_Mime_HeaderEncoder_Base64HeaderEncoder
   extends Swift_Encoder_Base64Encoder
   implements Swift_Mime_HeaderEncoder
 {
-
+  
   /**
    * Get the name of this encoding scheme.
    * Returns the string 'B'.
@@ -32,5 +32,5 @@ class Swift_Mime_HeaderEncoder_Base64HeaderEncoder
   {
     return 'B';
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index d727da0..9c4066d
@@ -22,8 +22,6 @@ class Swift_Mime_HeaderEncoder_QpHeaderEncoder extends Swift_Encoder_QpEncoder
   implements Swift_Mime_HeaderEncoder
 {
 
-  private static $_headerSafeMap = array();
-
   /**
    * Creates a new QpHeaderEncoder for the given CharacterStream.
    * @param Swift_CharacterStream $charStream to use for reading characters
@@ -31,15 +29,14 @@ class Swift_Mime_HeaderEncoder_QpHeaderEncoder extends Swift_Encoder_QpEncoder
   public function __construct(Swift_CharacterStream $charStream)
   {
     parent::__construct($charStream);
-    if (empty(self::$_headerSafeMap))
+    // Reset the safeMap
+    $this->_safeMap=array();
+    foreach (array_merge(
+      range(0x61, 0x7A), range(0x41, 0x5A),
+      range(0x30, 0x39), array(0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F)
+      ) as $byte)
     {
-      foreach (array_merge(
-        range(0x61, 0x7A), range(0x41, 0x5A),
-        range(0x30, 0x39), array(0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F)
-        ) as $byte)
-      {
-        self::$_headerSafeMap[$byte] = chr($byte);
-      }
+      $this->_safeMap[$byte] = chr($byte);
     }
   }
 
@@ -68,32 +65,4 @@ class Swift_Mime_HeaderEncoder_QpHeaderEncoder extends Swift_Encoder_QpEncoder
       );
   }
 
-  // -- Overridden points of extension
-
-  /**
-   * Encode the given byte array into a verbatim QP form.
-   * @param int[] $bytes
-   * @return string
-   * @access protected
-   */
-  protected function _encodeByteSequence(array $bytes, &$size)
-  {
-    $ret = '';
-    $size=0;
-    foreach ($bytes as $b)
-    {
-      if (isset(self::$_headerSafeMap[$b]))
-      {
-        $ret .= self::$_headerSafeMap[$b];
-        ++$size;
-      }
-      else
-      {
-        $ret .= self::$_qpMap[$b];
-        $size+=3;
-      }
-    }
-    return $ret;
-  }
-
 }
old mode 100644 (file)
new mode 100755 (executable)
index 1a78da2..13083bb
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/CharsetObserver.php';
 
 /**
  * Creates MIME headers.
@@ -18,7 +17,7 @@
  */
 interface Swift_Mime_HeaderFactory extends Swift_Mime_CharsetObserver
 {
-
+  
   /**
    * Create a new Mailbox Header with a list of $addresses.
    * @param string $name
@@ -26,7 +25,7 @@ interface Swift_Mime_HeaderFactory extends Swift_Mime_CharsetObserver
    * @return Swift_Mime_Header
    */
   public function createMailboxHeader($name, $addresses = null);
-
+  
   /**
    * Create a new Date header using $timestamp (UNIX time).
    * @param string $name
@@ -34,7 +33,7 @@ interface Swift_Mime_HeaderFactory extends Swift_Mime_CharsetObserver
    * @return Swift_Mime_Header
    */
   public function createDateHeader($name, $timestamp = null);
-
+  
   /**
    * Create a new basic text header with $name and $value.
    * @param string $name
@@ -42,7 +41,7 @@ interface Swift_Mime_HeaderFactory extends Swift_Mime_CharsetObserver
    * @return Swift_Mime_Header
    */
   public function createTextHeader($name, $value = null);
-
+  
   /**
    * Create a new ParameterizedHeader with $name, $value and $params.
    * @param string $name
@@ -52,7 +51,7 @@ interface Swift_Mime_HeaderFactory extends Swift_Mime_CharsetObserver
    */
   public function createParameterizedHeader($name, $value = null,
     $params = array());
-
+  
   /**
    * Create a new ID header for Message-ID or Content-ID.
    * @param string $name
@@ -60,7 +59,7 @@ interface Swift_Mime_HeaderFactory extends Swift_Mime_CharsetObserver
    * @return Swift_Mime_Header
    */
   public function createIdHeader($name, $ids = null);
-
+  
   /**
    * Create a new Path header with an address (path) in it.
    * @param string $name
@@ -68,5 +67,5 @@ interface Swift_Mime_HeaderFactory extends Swift_Mime_CharsetObserver
    * @return Swift_Mime_Header
    */
   public function createPathHeader($name, $path = null);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 6683c86..6589509
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/CharsetObserver.php';
 
 /**
  * A collection of MIME headers.
- *
+ * 
  * @package Swift
  * @subpackage Mime
- *
+ * 
  * @author Chris Corbyn
  */
 interface Swift_Mime_HeaderSet extends Swift_Mime_CharsetObserver
 {
-
+  
   /**
    * Add a new Mailbox Header with a list of $addresses.
-   *
+   * 
    * @param string $name
    * @param array|string $addresses
    */
   public function addMailboxHeader($name, $addresses = null);
-
+  
   /**
    * Add a new Date header using $timestamp (UNIX time).
-   *
+   * 
    * @param string $name
    * @param int $timestamp
    */
   public function addDateHeader($name, $timestamp = null);
-
+  
   /**
    * Add a new basic text header with $name and $value.
-   *
+   * 
    * @param string $name
    * @param string $value
    */
   public function addTextHeader($name, $value = null);
-
+  
   /**
    * Add a new ParameterizedHeader with $name, $value and $params.
-   *
+   * 
    * @param string $name
    * @param string $value
    * @param array $params
    */
   public function addParameterizedHeader($name, $value = null,
     $params = array());
-
+  
   /**
    * Add a new ID header for Message-ID or Content-ID.
-   *
+   * 
    * @param string $name
    * @param string|array $ids
    */
   public function addIdHeader($name, $ids = null);
-
+  
   /**
    * Add a new Path header with an address (path) in it.
-   *
+   * 
    * @param string $name
    * @param string $path
    */
   public function addPathHeader($name, $path = null);
-
+  
   /**
    * Returns true if at least one header with the given $name exists.
-   *
+   * 
    * If multiple headers match, the actual one may be specified by $index.
-   *
+   * 
    * @param string $name
    * @param int $index
-   *
+   * 
    * @return boolean
    */
   public function has($name, $index = 0);
-
+  
   /**
    * Set a header in the HeaderSet.
-   *
+   * 
    * The header may be a previously fetched header via {@link get()} or it may
    * be one that has been created separately.
-   *
+   * 
    * If $index is specified, the header will be inserted into the set at this
    * offset.
-   *
+   * 
    * @param Swift_Mime_Header $header
    * @param int $index
    */
   public function set(Swift_Mime_Header $header, $index = 0);
-
+  
   /**
    * Get the header with the given $name.
    * If multiple headers match, the actual one may be specified by $index.
    * Returns NULL if none present.
-   *
+   * 
    * @param string $name
    * @param int $index
-   *
+   * 
    * @return Swift_Mime_Header
    */
   public function get($name, $index = 0);
-
+  
   /**
    * Get all headers with the given $name.
-   *
+   * 
    * @param string $name
-   *
+   * 
    * @return array
    */
   public function getAll($name = null);
-
+  
   /**
    * Remove the header with the given $name if it's set.
-   *
+   * 
    * If multiple headers match, the actual one may be specified by $index.
-   *
+   * 
    * @param string $name
    * @param int $index
    */
   public function remove($name, $index = 0);
-
+  
   /**
    * Remove all headers with the given $name.
-   *
+   * 
    * @param string $name
    */
   public function removeAll($name);
-
+  
   /**
    * Create a new instance of this HeaderSet.
-   *
+   * 
    * @return Swift_Mime_HeaderSet
    */
   public function newInstance();
-
+  
   /**
    * Define a list of Header names as an array in the correct order.
-   *
+   * 
    * These Headers will be output in the given order where present.
-   *
+   * 
    * @param array $sequence
    */
   public function defineOrdering(array $sequence);
-
+  
   /**
    * Set a list of header names which must always be displayed when set.
-   *
+   * 
    * Usually headers without a field value won't be output unless set here.
-   *
+   * 
    * @param array $names
    */
   public function setAlwaysDisplayed(array $names);
-
+  
   /**
    * Returns a string with a representation of all headers.
-   *
+   * 
    * @return string
    */
   public function toString();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 6632dea..1304e5e
@@ -8,10 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Header.php';
-//@require 'Swift/Mime/HeaderEncoder.php';
-//@require 'Swift/RfcComplianceException.php';
-
 /**
  * An abstract base MIME Header.
  * @package Swift
  */
 abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
 {
-
-  /**
-   * Special characters used in the syntax which need to be escaped.
-   * @var string[]
-   * @access private
-   */
-  private $_specials = array();
-
-  /**
-   * Tokens defined in RFC 2822 (and some related RFCs).
-   * @var string[]
-   * @access private
-   */
-  private $_grammar = array();
-
+  
   /**
    * The name of this Header.
    * @var string
    * @access private
    */
   private $_name;
-
+  
+  /**
+   * The Grammar used for this Header.
+   * @var Swift_Mime_Grammar
+   * @access private
+   */
+  private $_grammar;
+  
   /**
    * The Encoder used to encode this Header.
    * @var Swift_Encoder
    * @access private
    */
   private $_encoder;
-
+  
   /**
    * The maximum length of a line in the header.
    * @var int
    * @access private
    */
   private $_lineLength = 78;
-
+  
   /**
    * The language used in this Header.
    * @var string
    */
   private $_lang;
-
+  
   /**
    * The character set of the text in this Header.
    * @var string
    * @access private
    */
   private $_charset = 'utf-8';
-
+  
   /**
    * The value of this Header, cached.
    * @var string
    * @access private
    */
   private $_cachedValue = null;
-
+  
+  /**
+   * Creates a new Header.
+   * @param Swift_Mime_Grammar $grammar
+   */ 
+  public function __construct(Swift_Mime_Grammar $grammar)
+  {
+    $this->setGrammar($grammar);
+  }
+  
   /**
    * Set the character set used in this Header.
    * @param string $charset
@@ -89,7 +87,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
       $this->_encoder->charsetChanged($charset);
     }
   }
-
+  
   /**
    * Get the character set used in this Header.
    * @return string
@@ -98,7 +96,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->_charset;
   }
-
+  
   /**
    * Set the language used in this Header.
    * For example, for US English, 'en-us'.
@@ -110,7 +108,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     $this->clearCachedValueIf($this->_lang != $lang);
     $this->_lang = $lang;
   }
-
+  
   /**
    * Get the language used in this Header.
    * @return string
@@ -119,7 +117,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->_lang;
   }
-
+  
   /**
    * Set the encoder used for encoding the header.
    * @param Swift_Mime_HeaderEncoder $encoder
@@ -129,7 +127,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     $this->_encoder = $encoder;
     $this->setCachedValue(null);
   }
-
+  
   /**
    * Get the encoder used for encoding this Header.
    * @return Swift_Mime_HeaderEncoder
@@ -138,7 +136,26 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->_encoder;
   }
-
+  
+  /**
+   * Set the grammar used for the header.
+   * @param Swift_Mime_Grammar $grammar
+   */
+  public function setGrammar(Swift_Mime_Grammar $grammar)
+  {
+    $this->_grammar = $grammar;
+    $this->setCachedValue(null);
+  }
+  
+  /**
+   * Get the grammar used for this Header.
+   * @return Swift_Mime_Grammar
+   */
+  public function getGrammar()
+  {
+    return $this->_grammar;
+  }
+  
   /**
    * Get the name of this header (e.g. charset).
    * @return string
@@ -147,7 +164,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->_name;
   }
-
+  
   /**
    * Set the maximum length of lines in the header (excluding EOL).
    * @param int $lineLength
@@ -157,7 +174,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     $this->clearCachedValueIf($this->_lineLength != $lineLength);
     $this->_lineLength = $lineLength;
   }
-
+  
   /**
    * Get the maximum permitted length of lines in this Header.
    * @return int
@@ -166,7 +183,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->_lineLength;
   }
-
+  
   /**
    * Get this Header rendered as a RFC 2822 compliant string.
    * @return string
@@ -176,7 +193,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->_tokensToString($this->toTokens());
   }
-
+  
   /**
    * Returns a string representation of this object.
    *
@@ -188,9 +205,9 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->toString();
   }
-
+  
   // -- Points of extension
-
+  
   /**
    * Set the name of this Header field.
    * @param string $name
@@ -200,119 +217,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     $this->_name = $name;
   }
-
-  /**
-   * Initialize some RFC 2822 (and friends) ABNF grammar definitions.
-   * @access protected
-   */
-  protected function initializeGrammar()
-  {
-    $this->_specials = array(
-      '(', ')', '<', '>', '[', ']',
-      ':', ';', '@', ',', '.', '"'
-      );
-
-    /*** Refer to RFC 2822 for ABNF grammar ***/
-
-    //All basic building blocks
-    $this->_grammar['NO-WS-CTL'] = '[\x01-\x08\x0B\x0C\x0E-\x19\x7F]';
-    $this->_grammar['WSP'] = '[ \t]';
-    $this->_grammar['CRLF'] = '(?:\r\n)';
-    $this->_grammar['FWS'] = '(?:(?:' . $this->_grammar['WSP'] . '*' .
-        $this->_grammar['CRLF'] . ')?' . $this->_grammar['WSP'] . ')';
-    $this->_grammar['text'] = '[\x00-\x08\x0B\x0C\x0E-\x7F]';
-    $this->_grammar['quoted-pair'] = '(?:\\\\' . $this->_grammar['text'] . ')';
-    $this->_grammar['ctext'] = '(?:' . $this->_grammar['NO-WS-CTL'] .
-        '|[\x21-\x27\x2A-\x5B\x5D-\x7E])';
-    //Uses recursive PCRE (?1) -- could be a weak point??
-    $this->_grammar['ccontent'] = '(?:' . $this->_grammar['ctext'] . '|' .
-        $this->_grammar['quoted-pair'] . '|(?1))';
-    $this->_grammar['comment'] = '(\((?:' . $this->_grammar['FWS'] . '|' .
-        $this->_grammar['ccontent']. ')*' . $this->_grammar['FWS'] . '?\))';
-    $this->_grammar['CFWS'] = '(?:(?:' . $this->_grammar['FWS'] . '?' .
-        $this->_grammar['comment'] . ')*(?:(?:' . $this->_grammar['FWS'] . '?' .
-        $this->_grammar['comment'] . ')|' . $this->_grammar['FWS'] . '))';
-    $this->_grammar['qtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] .
-        '|[\x21\x23-\x5B\x5D-\x7E])';
-    $this->_grammar['qcontent'] = '(?:' . $this->_grammar['qtext'] . '|' .
-        $this->_grammar['quoted-pair'] . ')';
-    $this->_grammar['quoted-string'] = '(?:' . $this->_grammar['CFWS'] . '?"' .
-        '(' . $this->_grammar['FWS'] . '?' . $this->_grammar['qcontent'] . ')*' .
-        $this->_grammar['FWS'] . '?"' . $this->_grammar['CFWS'] . '?)';
-    $this->_grammar['atext'] = '[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]';
-    $this->_grammar['atom'] = '(?:' . $this->_grammar['CFWS'] . '?' .
-        $this->_grammar['atext'] . '+' . $this->_grammar['CFWS'] . '?)';
-    $this->_grammar['dot-atom-text'] = '(?:' . $this->_grammar['atext'] . '+' .
-        '(\.' . $this->_grammar['atext'] . '+)*)';
-    $this->_grammar['dot-atom'] = '(?:' . $this->_grammar['CFWS'] . '?' .
-        $this->_grammar['dot-atom-text'] . '+' . $this->_grammar['CFWS'] . '?)';
-    $this->_grammar['word'] = '(?:' . $this->_grammar['atom'] . '|' .
-        $this->_grammar['quoted-string'] . ')';
-    $this->_grammar['phrase'] = '(?:' . $this->_grammar['word'] . '+?)';
-    $this->_grammar['no-fold-quote'] = '(?:"(?:' . $this->_grammar['qtext'] .
-        '|' . $this->_grammar['quoted-pair'] . ')*")';
-    $this->_grammar['dtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] .
-        '|[\x21-\x5A\x5E-\x7E])';
-    $this->_grammar['no-fold-literal'] = '(?:\[(?:' . $this->_grammar['dtext'] .
-        '|' . $this->_grammar['quoted-pair'] . ')*\])';
-
-    //Message IDs
-    $this->_grammar['id-left'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' .
-        $this->_grammar['no-fold-quote'] . ')';
-    $this->_grammar['id-right'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' .
-        $this->_grammar['no-fold-literal'] . ')';
-
-    //Addresses, mailboxes and paths
-    $this->_grammar['local-part'] = '(?:' . $this->_grammar['dot-atom'] . '|' .
-        $this->_grammar['quoted-string'] . ')';
-    $this->_grammar['dcontent'] = '(?:' . $this->_grammar['dtext'] . '|' .
-        $this->_grammar['quoted-pair'] . ')';
-    $this->_grammar['domain-literal'] = '(?:' . $this->_grammar['CFWS'] . '?\[(' .
-        $this->_grammar['FWS'] . '?' . $this->_grammar['dcontent'] . ')*?' .
-        $this->_grammar['FWS'] . '?\]' . $this->_grammar['CFWS'] . '?)';
-    $this->_grammar['domain'] = '(?:' . $this->_grammar['dot-atom'] . '|' .
-        $this->_grammar['domain-literal'] . ')';
-    $this->_grammar['addr-spec'] = '(?:' . $this->_grammar['local-part'] . '@' .
-        $this->_grammar['domain'] . ')';
-  }
-
-  /**
-   * Get the grammar defined for $name token.
-   * @param string $name execatly as written in the RFC
-   * @return string
-   */
-  protected function getGrammar($name)
-  {
-    if (array_key_exists($name, $this->_grammar))
-    {
-      return $this->_grammar[$name];
-    }
-    else
-    {
-      throw new Swift_RfcComplianceException(
-        "No such grammar '" . $name . "' defined."
-        );
-    }
-  }
-
-  /**
-   * Escape special characters in a string (convert to quoted-pairs).
-   * @param string $token
-   * @param string[] $include additonal chars to escape
-   * @param string[] $exclude chars from escaping
-   * @return string
-   */
-  protected function escapeSpecials($token, $include = array(),
-    $exclude = array())
-  {
-    foreach (
-      array_merge(array('\\'), array_diff($this->_specials, $exclude), $include) as $char)
-    {
-      $token = str_replace($char, '\\' . $char, $token);
-    }
-    return $token;
-  }
-
+  
   /**
    * Produces a compliant, formatted RFC 2822 'phrase' based on the string given.
    * @param Swift_Mime_Header $header
@@ -328,14 +233,14 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     //Treat token as exactly what was given
     $phraseStr = $string;
     //If it's not valid
-    if (!preg_match('/^' . $this->_grammar['phrase'] . '$/D', $phraseStr))
+    if (!preg_match('/^' . $this->getGrammar()->getDefinition('phrase') . '$/D', $phraseStr))
     {
       // .. but it is just ascii text, try escaping some characters
       // and make it a quoted-string
-      if (preg_match('/^' . $this->_grammar['text'] . '*$/D', $phraseStr))
+      if (preg_match('/^' . $this->getGrammar()->getDefinition('text') . '*$/D', $phraseStr))
       {
-        $phraseStr = $this->escapeSpecials(
-          $phraseStr, array('"'), $this->_specials
+        $phraseStr = $this->getGrammar()->escapeSpecials(
+          $phraseStr, array('"'), $this->getGrammar()->getSpecials()
           );
         $phraseStr = '"' . $phraseStr . '"';
       }
@@ -353,10 +258,10 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
         $phraseStr = $this->encodeWords($header, $string, $usedLength);
       }
     }
-
+    
     return $phraseStr;
   }
-
+  
   /**
    * Encode needed word tokens within a string of input.
    * @param string $input
@@ -367,9 +272,9 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     $usedLength = -1)
   {
     $value = '';
-
+    
     $tokens = $this->getEncodableWordTokens($input);
-
+    
     foreach ($tokens as $token)
     {
       //See RFC 2822, Sect 2.2 (really 2.2 ??)
@@ -384,13 +289,13 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
             $value .= $firstChar;
             $token = substr($token, 1);
         }
-
+        
         if (-1 == $usedLength)
         {
           $usedLength = strlen($header->getFieldName() . ': ') + strlen($value);
         }
         $value .= $this->getTokenAsEncodedWord($token, $usedLength);
-
+        
         $header->setMaxLineLength(76); //Forefully override
       }
       else
@@ -398,10 +303,10 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
         $value .= $token;
       }
     }
-
+    
     return $value;
   }
-
+  
   /**
    * Test if a token needs to be encoded or not.
    * @param string $token
@@ -411,7 +316,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token);
   }
-
+  
   /**
    * Splits a string into tokens in blocks of words which can be encoded quickly.
    * @param string $string
@@ -420,7 +325,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   protected function getEncodableWordTokens($string)
   {
     $tokens = array();
-
+    
     $encodedToken = '';
     //Split at all whitespace boundaries
     foreach (preg_split('~(?=[\t ])~', $string) as $token)
@@ -443,10 +348,10 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     {
       $tokens[] = $encodedToken;
     }
-
+    
     return $tokens;
   }
-
+  
   /**
    * Get a token as an encoded word for safe insertion into headers.
    * @param string $token to encode
@@ -464,28 +369,28 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     $encodingWrapperLength = strlen(
       '=?' . $charsetDecl . '?' . $this->_encoder->getName() . '??='
       );
-
+    
     if ($firstLineOffset >= 75) //Does this logic need to be here?
     {
       $firstLineOffset = 0;
     }
-
+    
     $encodedTextLines = explode("\r\n",
       $this->_encoder->encodeString(
         $token, $firstLineOffset, 75 - $encodingWrapperLength
         )
       );
-
+    
     foreach ($encodedTextLines as $lineNum => $line)
     {
       $encodedTextLines[$lineNum] = '=?' . $charsetDecl .
         '?' . $this->_encoder->getName() .
         '?' . $line . '?=';
     }
-
+    
     return implode("\r\n ", $encodedTextLines);
   }
-
+  
   /**
    * Generates tokens from the given string which include CRLF as individual tokens.
    * @param string $token
@@ -496,7 +401,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return preg_split('~(\r\n)~', $token, -1, PREG_SPLIT_DELIM_CAPTURE);
   }
-
+  
   /**
    * Set a value into the cache.
    * @param string $value
@@ -506,7 +411,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     $this->_cachedValue = $value;
   }
-
+  
   /**
    * Get the value in the cache.
    * @return string
@@ -516,7 +421,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
   {
     return $this->_cachedValue;
   }
-
+  
   /**
    * Clear the cached value if $condition is met.
    * @param boolean $condition
@@ -529,9 +434,9 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
       $this->setCachedValue(null);
     }
   }
-
+  
   // -- Private methods
-
+  
   /**
    * Generate a list of all tokens in the final header.
    * @param string $string input, optional
@@ -544,18 +449,18 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     {
       $string = $this->getFieldBody();
     }
-
+    
     $tokens = array();
-
+    
     //Generate atoms; split at all invisible boundaries followed by WSP
     foreach (preg_split('~(?=[ \t])~', $string) as $token)
     {
       $tokens = array_merge($tokens, $this->generateTokenLines($token));
     }
-
+    
     return $tokens;
   }
-
+  
   /**
    * Takes an array of tokens which appear in the header and turns them into
    * an RFC 2822 compliant string, adding FWSP where needed.
@@ -569,7 +474,7 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
     $headerLines = array();
     $headerLines[] = $this->_name . ': ';
     $currentLine =& $headerLines[$lineCount++];
-
+    
     //Build all tokens back into compliant header
     foreach ($tokens as $i => $token)
     {
@@ -581,16 +486,16 @@ abstract class Swift_Mime_Headers_AbstractHeader implements Swift_Mime_Header
         $headerLines[] = '';
         $currentLine =& $headerLines[$lineCount++];
       }
-
+      
       //Append token to the line
       if ("\r\n" != $token)
       {
         $currentLine .= $token;
       }
     }
-
+    
     //Implode with FWS (RFC 2822, 2.2.3)
     return implode("\r\n", $headerLines) . "\r\n";
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 201b121..bb345fd
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Headers/AbstractHeader.php';
 
 
 /**
  */
 class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
 {
-
+  
   /**
    * The UNIX timestamp value of this Header.
    * @var int
    * @access private
    */
   private $_timestamp;
-
+  
   /**
    * Creates a new DateHeader with $name and $timestamp.
    * Example:
@@ -36,12 +35,14 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
    * ?>
    * </code>
    * @param string $name of Header
+   * @param Swift_Mime_Grammar $grammar
    */
-  public function __construct($name)
+  public function __construct($name, Swift_Mime_Grammar $grammar)
   {
     $this->setFieldName($name);
+    parent::__construct($grammar);
   }
-
+  
   /**
    * Get the type of Header that this instance represents.
    * @return int
@@ -52,7 +53,7 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return self::TYPE_DATE;
   }
-
+  
   /**
    * Set the model for the field body.
    * This method takes a UNIX timestamp.
@@ -62,7 +63,7 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
   {
     $this->setTimestamp($model);
   }
-
+  
   /**
    * Get the model for the field body.
    * This method returns a UNIX timestamp.
@@ -72,7 +73,7 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return $this->getTimestamp();
   }
-
+  
   /**
    * Get the UNIX timestamp of the Date in this Header.
    * @return int
@@ -81,7 +82,7 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return $this->_timestamp;
   }
-
+  
   /**
    * Set the UNIX timestamp of the Date in this Header.
    * @param int $timestamp
@@ -95,7 +96,7 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
     $this->clearCachedValueIf($this->_timestamp != $timestamp);
     $this->_timestamp = $timestamp;
   }
-
+  
   /**
    * Get the string value of the body in this Header.
    * This is not necessarily RFC 2822 compliant since folding white space will
@@ -114,5 +115,5 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader
     }
     return $this->getCachedValue();
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index c3743dd..df978f0
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Headers/AbstractHeader.php';
-//@require 'Swift/RfcComplianceException.php';
 
 /**
  * An ID MIME Header for something like Message-ID or Content-ID.
@@ -20,7 +18,7 @@
 class Swift_Mime_Headers_IdentificationHeader
   extends Swift_Mime_Headers_AbstractHeader
 {
-
+  
   /**
    * The IDs used in the value of this Header.
    * This may hold multiple IDs or just a single ID.
@@ -28,17 +26,18 @@ class Swift_Mime_Headers_IdentificationHeader
    * @access private
    */
   private $_ids = array();
-
+  
   /**
    * Creates a new IdentificationHeader with the given $name and $id.
    * @param string $name
+   * @param Swift_Mime_Grammar $grammar
    */
-  public function __construct($name)
+  public function __construct($name, Swift_Mime_Grammar $grammar)
   {
     $this->setFieldName($name);
-    $this->initializeGrammar();
+    parent::__construct($grammar);
   }
-
+  
   /**
    * Get the type of Header that this instance represents.
    * @return int
@@ -49,7 +48,7 @@ class Swift_Mime_Headers_IdentificationHeader
   {
     return self::TYPE_ID;
   }
-
+  
   /**
    * Set the model for the field body.
    * This method takes a string ID, or an array of IDs
@@ -60,7 +59,7 @@ class Swift_Mime_Headers_IdentificationHeader
   {
     $this->setId($model);
   }
-
+  
   /**
    * Get the model for the field body.
    * This method returns an array of IDs
@@ -70,7 +69,7 @@ class Swift_Mime_Headers_IdentificationHeader
   {
     return $this->getIds();
   }
-
+  
   /**
    * Set the ID used in the value of this header.
    * @param string $id
@@ -78,9 +77,9 @@ class Swift_Mime_Headers_IdentificationHeader
    */
   public function setId($id)
   {
-    return $this->setIds(array($id));
+    $this->setIds(array($id));
   }
-
+  
   /**
    * Get the ID used in the value of this Header.
    * If multiple IDs are set only the first is returned.
@@ -93,7 +92,7 @@ class Swift_Mime_Headers_IdentificationHeader
       return $this->_ids[0];
     }
   }
-
+  
   /**
    * Set a collection of IDs to use in the value of this Header.
    * @param string[] $ids
@@ -102,29 +101,17 @@ class Swift_Mime_Headers_IdentificationHeader
   public function setIds(array $ids)
   {
     $actualIds = array();
-
+    
     foreach ($ids as $k => $id)
     {
-      if (preg_match(
-        '/^' . $this->getGrammar('id-left') . '@' .
-        $this->getGrammar('id-right') . '$/D',
-        $id
-        ))
-      {
-        $actualIds[] = $id;
-      }
-      else
-      {
-        throw new Swift_RfcComplianceException(
-          'Invalid ID given <' . $id . '>'
-          );
-      }
+      $this->_assertValidId($id);
+      $actualIds[] = $id;
     }
-
+    
     $this->clearCachedValueIf($this->_ids != $actualIds);
     $this->_ids = $actualIds;
   }
-
+  
   /**
    * Get the list of IDs used in this Header.
    * @return string[]
@@ -133,7 +120,7 @@ class Swift_Mime_Headers_IdentificationHeader
   {
     return $this->_ids;
   }
-
+  
   /**
    * Get the string value of the body in this Header.
    * This is not necessarily RFC 2822 compliant since folding white space will
@@ -147,15 +134,33 @@ class Swift_Mime_Headers_IdentificationHeader
     if (!$this->getCachedValue())
     {
       $angleAddrs = array();
-
+    
       foreach ($this->_ids as $id)
       {
         $angleAddrs[] = '<' . $id . '>';
       }
-
+    
       $this->setCachedValue(implode(' ', $angleAddrs));
     }
     return $this->getCachedValue();
   }
-
+  
+  /**
+   * Throws an Exception if the id passed does not comply with RFC 2822.
+   * @param string $id
+   * @throws Swift_RfcComplianceException
+   */
+  private function _assertValidId($id)
+  {
+    if (!preg_match(
+      '/^' . $this->getGrammar()->getDefinition('id-left') . '@' .
+      $this->getGrammar()->getDefinition('id-right') . '$/D',
+      $id
+      ))
+    {
+      throw new Swift_RfcComplianceException(
+        'Invalid ID given <' . $id . '>'
+        );
+    }
+  }
 }
old mode 100644 (file)
new mode 100755 (executable)
index a65b438..67551c8
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Headers/AbstractHeader.php';
-//@require 'Swift/Mime/HeaderEncoder.php';
 
 /**
  * A Mailbox Address MIME Header for something like From or Sender.
  */
 class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
 {
-
+  
   /**
    * The mailboxes used in this Header.
    * @var string[]
    * @access private
    */
   private $_mailboxes = array();
-
+  
   /**
    * Creates a new MailboxHeader with $name.
    * @param string $name of Header
    * @param Swift_Mime_HeaderEncoder $encoder
+   * @param Swift_Mime_Grammar $grammar
    */
-  public function __construct($name, Swift_Mime_HeaderEncoder $encoder)
+  public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Mime_Grammar $grammar)
   {
     $this->setFieldName($name);
     $this->setEncoder($encoder);
-    $this->initializeGrammar();
+    parent::__construct($grammar);
   }
-
+  
   /**
    * Get the type of Header that this instance represents.
    * @return int
@@ -49,7 +48,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return self::TYPE_MAILBOX;
   }
-
+  
   /**
    * Set the model for the field body.
    * This method takes a string, or an array of addresses.
@@ -60,7 +59,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   {
     $this->setNameAddresses($model);
   }
-
+  
   /**
    * Get the model for the field body.
    * This method returns an associative array like {@link getNameAddresses()}
@@ -71,7 +70,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return $this->getNameAddresses();
   }
-
+  
   /**
    * Set a list of mailboxes to be shown in this Header.
    * The mailboxes can be a simple array of addresses, or an array of
@@ -97,7 +96,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
     $this->_mailboxes = $this->normalizeMailboxes((array) $mailboxes);
     $this->setCachedValue(null); //Clear any cached value
   }
-
+  
   /**
    * Get the full mailbox list of this Header as an array of valid RFC 2822 strings.
    * Example:
@@ -123,7 +122,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return $this->_createNameAddressStrings($this->getNameAddresses());
   }
-
+  
   /**
    * Get all mailboxes in this Header as key=>value pairs.
    * The key is the address and the value is the name (or null if none set).
@@ -149,7 +148,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return $this->_mailboxes;
   }
-
+  
   /**
    * Makes this Header represent a list of plain email addresses with no names.
    * Example:
@@ -168,9 +167,9 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
    */
   public function setAddresses($addresses)
   {
-    return $this->setNameAddresses(array_values((array) $addresses));
+    $this->setNameAddresses(array_values((array) $addresses));
   }
-
+  
   /**
    * Get all email addresses in this Header.
    * @return string[]
@@ -180,7 +179,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return array_keys($this->_mailboxes);
   }
-
+  
   /**
    * Remove one or more addresses from this Header.
    * @param string|string[] $addresses
@@ -193,7 +192,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
       unset($this->_mailboxes[$address]);
     }
   }
-
+  
   /**
    * Get the string value of the body in this Header.
    * This is not necessarily RFC 2822 compliant since folding white space will
@@ -211,9 +210,9 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
     }
     return $this->getCachedValue();
   }
-
+  
   // -- Points of extension
-
+  
   /**
    * Normalizes a user-input list of mailboxes into consistent key=>value pairs.
    * @param string[] $mailboxes
@@ -223,7 +222,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   protected function normalizeMailboxes(array $mailboxes)
   {
     $actualMailboxes = array();
-
+    
     foreach ($mailboxes as $key => $value)
     {
       if (is_string($key)) //key is email addr
@@ -239,10 +238,10 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
       $this->_assertValidAddress($address);
       $actualMailboxes[$address] = $name;
     }
-
+    
     return $actualMailboxes;
   }
-
+  
   /**
    * Produces a compliant, formatted display-name based on the string given.
    * @param string $displayName as displayed
@@ -256,7 +255,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
       $this->getCharset(), $this->getEncoder(), $shorten
       );
   }
-
+  
   /**
    * Creates a string form of all the mailboxes in the passed array.
    * @param string[] $mailboxes
@@ -268,9 +267,9 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return implode(', ', $this->_createNameAddressStrings($mailboxes));
   }
-
+  
   // -- Private methods
-
+  
   /**
    * Return an array of strings conforming the the name-addr spec of RFC 2822.
    * @param string[] $mailboxes
@@ -280,7 +279,7 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
   private function _createNameAddressStrings(array $mailboxes)
   {
     $strings = array();
-
+    
     foreach ($mailboxes as $email => $name)
     {
       $mailboxStr = $email;
@@ -291,19 +290,19 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
       }
       $strings[] = $mailboxStr;
     }
-
+    
     return $strings;
   }
-
+  
   /**
    * Throws an Exception if the address passed does not comply with RFC 2822.
    * @param string $address
-   * @throws Exception If invalid.
-   * @access protected
+   * @throws Swift_RfcComplianceException If invalid.
+   * @access private
    */
   private function _assertValidAddress($address)
   {
-    if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D',
+    if (!preg_match('/^' . $this->getGrammar()->getDefinition('addr-spec') . '$/D',
       $address))
     {
       throw new Swift_RfcComplianceException(
@@ -312,5 +311,5 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader
         );
     }
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 0753ab1..08ebce4
@@ -8,10 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Headers/UnstructuredHeader.php';
-//@require 'Swift/Mime/HeaderEncoder.php';
-//@require 'Swift/Mime/ParameterizedHeader.php';
-//@require 'Swift/Encoder.php';
 
 /**
  * An abstract base MIME Header.
@@ -23,44 +19,43 @@ class Swift_Mime_Headers_ParameterizedHeader
   extends Swift_Mime_Headers_UnstructuredHeader
   implements Swift_Mime_ParameterizedHeader
 {
-
+  
   /**
    * The Encoder used to encode the parameters.
    * @var Swift_Encoder
    * @access private
    */
   private $_paramEncoder;
-
+  
   /**
    * The parameters as an associative array.
    * @var string[]
    * @access private
    */
   private $_params = array();
-
+  
   /**
    * RFC 2231's definition of a token.
    * @var string
    * @access private
    */
   private $_tokenRe;
-
+  
   /**
    * Creates a new ParameterizedHeader with $name.
    * @param string $name
    * @param Swift_Mime_HeaderEncoder $encoder
    * @param Swift_Encoder $paramEncoder, optional
-   */
+   * @param Swift_Mime_Grammar $grammar
+   */ 
   public function __construct($name, Swift_Mime_HeaderEncoder $encoder,
-    Swift_Encoder $paramEncoder = null)
+    Swift_Encoder $paramEncoder = null, Swift_Mime_Grammar $grammar)
   {
-    $this->setFieldName($name);
-    $this->setEncoder($encoder);
+    parent::__construct($name, $encoder, $grammar);
     $this->_paramEncoder = $paramEncoder;
-    $this->initializeGrammar();
     $this->_tokenRe = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)';
   }
-
+  
   /**
    * Get the type of Header that this instance represents.
    * @return int
@@ -71,7 +66,7 @@ class Swift_Mime_Headers_ParameterizedHeader
   {
     return self::TYPE_PARAMETERIZED;
   }
-
+  
   /**
    * Set the character set used in this Header.
    * @param string $charset
@@ -84,7 +79,7 @@ class Swift_Mime_Headers_ParameterizedHeader
       $this->_paramEncoder->charsetChanged($charset);
     }
   }
-
+  
   /**
    * Set the value of $parameter.
    * @param string $parameter
@@ -94,7 +89,7 @@ class Swift_Mime_Headers_ParameterizedHeader
   {
     $this->setParameters(array_merge($this->getParameters(), array($parameter => $value)));
   }
-
+  
   /**
    * Get the value of $parameter.
    * @return string
@@ -106,7 +101,7 @@ class Swift_Mime_Headers_ParameterizedHeader
       ? $params[$parameter]
       : null;
   }
-
+  
   /**
    * Set an associative array of parameter names mapped to values.
    * @param string[]
@@ -116,7 +111,7 @@ class Swift_Mime_Headers_ParameterizedHeader
     $this->clearCachedValueIf($this->_params != $parameters);
     $this->_params = $parameters;
   }
-
+  
   /**
    * Returns an associative array of parameter names mapped to values.
    * @return string[]
@@ -125,7 +120,7 @@ class Swift_Mime_Headers_ParameterizedHeader
   {
     return $this->_params;
   }
-
+  
   /**
    * Get the value of this header prepared for rendering.
    * @return string
@@ -143,9 +138,9 @@ class Swift_Mime_Headers_ParameterizedHeader
     }
     return $body;
   }
-
+  
   // -- Protected methods
-
+  
   /**
    * Generate a list of all tokens in the final header.
    * This doesn't need to be overridden in theory, but it is for implementation
@@ -156,7 +151,7 @@ class Swift_Mime_Headers_ParameterizedHeader
   protected function toTokens($string = null)
   {
     $tokens = parent::toTokens(parent::getFieldBody());
-
+    
     //Try creating any parameters
     foreach ($this->_params as $name => $value)
     {
@@ -169,12 +164,12 @@ class Swift_Mime_Headers_ParameterizedHeader
           ));
       }
     }
-
+    
     return $tokens;
   }
-
+  
   // -- Private methods
-
+  
   /**
    * Render a RFC 2047 compliant header parameter from the $name and $value.
    * @param string $name
@@ -185,18 +180,18 @@ class Swift_Mime_Headers_ParameterizedHeader
   private function _createParameter($name, $value)
   {
     $origValue = $value;
-
+    
     $encoded = false;
     //Allow room for parameter name, indices, "=" and DQUOTEs
     $maxValueLength = $this->getMaxLineLength() - strlen($name . '=*N"";') - 1;
     $firstLineOffset = 0;
-
+    
     //If it's not already a valid parameter value...
     if (!preg_match('/^' . $this->_tokenRe . '$/D', $value))
     {
       //TODO: text, or something else??
       //... and it's not ascii
-      if (!preg_match('/^' . $this->getGrammar('text') . '*$/D', $value))
+      if (!preg_match('/^' . $this->getGrammar()->getDefinition('text') . '*$/D', $value))
       {
         $encoded = true;
         //Allow space for the indices, charset and language
@@ -206,7 +201,7 @@ class Swift_Mime_Headers_ParameterizedHeader
           );
       }
     }
-
+    
     //Encode if we need to
     if ($encoded || strlen($value) > $maxValueLength)
     {
@@ -222,9 +217,9 @@ class Swift_Mime_Headers_ParameterizedHeader
         $encoded = false;
       }
     }
-
+    
     $valueLines = isset($this->_paramEncoder) ? explode("\r\n", $value) : array($value);
-
+    
     //Need to add indices
     if (count($valueLines) > 1)
     {
@@ -232,7 +227,7 @@ class Swift_Mime_Headers_ParameterizedHeader
       foreach ($valueLines as $i => $line)
       {
         $paramLines[] = $name . '*' . $i .
-          $this->_getEndOfParameterValue($line, $encoded, $i == 0);
+          $this->_getEndOfParameterValue($line, true, $i == 0);
       }
       return implode(";\r\n ", $paramLines);
     }
@@ -243,7 +238,7 @@ class Swift_Mime_Headers_ParameterizedHeader
         );
     }
   }
-
+  
   /**
    * Returns the parameter value from the "=" and beyond.
    * @param string $value to append
@@ -270,5 +265,5 @@ class Swift_Mime_Headers_ParameterizedHeader
     }
     return $prepend . $value;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 46b6c9c..7f1252d
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Headers/AbstractHeader.php';
-//@require 'Swift/RfcComplianceException.php';
 
 /**
  * A Path Header in Swift Mailer, such a Return-Path.
  */
 class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader
 {
-
+  
   /**
    * The address in this Header (if specified).
    * @var string
    * @access private
    */
   private $_address;
-
+  
   /**
    * Creates a new PathHeader with the given $name.
    * @param string $name
+   * @param Swift_Mime_Grammar $grammar
    */
-  public function __construct($name)
+  public function __construct($name, Swift_Mime_Grammar $grammar)
   {
     $this->setFieldName($name);
-    $this->initializeGrammar();
+    parent::__construct($grammar);
   }
-
+  
   /**
    * Get the type of Header that this instance represents.
    * @return int
@@ -47,7 +46,7 @@ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return self::TYPE_PATH;
   }
-
+  
   /**
    * Set the model for the field body.
    * This method takes a string for an address.
@@ -58,7 +57,7 @@ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader
   {
     $this->setAddress($model);
   }
-
+  
   /**
    * Get the model for the field body.
    * This method returns a string email address.
@@ -68,7 +67,7 @@ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return $this->getAddress();
   }
-
+  
   /**
    * Set the Address which should appear in this Header.
    * @param string $address
@@ -80,20 +79,18 @@ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader
     {
       $this->_address = null;
     }
-    elseif ('' == $address
-      || preg_match('/^' . $this->getGrammar('addr-spec') . '$/D', $address))
+    elseif ('' == $address)
     {
-      $this->_address = $address;
+      $this->_address = '';
     }
     else
     {
-      throw new Swift_RfcComplianceException(
-        'Address set in PathHeader does not comply with addr-spec of RFC 2822.'
-        );
+      $this->_assertValidAddress($address);
+      $this->_address = $address;
     }
     $this->setCachedValue(null);
   }
-
+  
   /**
    * Get the address which is used in this Header (if any).
    * Null is returned if no address is set.
@@ -103,7 +100,7 @@ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader
   {
     return $this->_address;
   }
-
+  
   /**
    * Get the string value of the body in this Header.
    * This is not necessarily RFC 2822 compliant since folding white space will
@@ -122,5 +119,22 @@ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader
     }
     return $this->getCachedValue();
   }
-
+  
+  /**
+   * Throws an Exception if the address passed does not comply with RFC 2822.
+   * @param string $address
+   * @throws Swift_RfcComplianceException If invalid.
+   * @access private
+   */
+  private function _assertValidAddress($address)
+  {
+    if (!preg_match('/^' . $this->getGrammar()->getDefinition('addr-spec') . '$/D',
+      $address))
+    {
+      throw new Swift_RfcComplianceException(
+        'Address set in PathHeader does not comply with addr-spec of RFC 2822.'
+        );
+    }
+  }
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index b074861..491d7eb
@@ -8,8 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Headers/AbstractHeader.php';
-//@require 'Swift/Mime/HeaderEncoder.php';
 
 /**
  * A Simple MIME Header.
 class Swift_Mime_Headers_UnstructuredHeader
   extends Swift_Mime_Headers_AbstractHeader
 {
-
+  
   /**
    * The value of this Header.
    * @var string
    * @access private
    */
   private $_value;
-
+  
   /**
    * Creates a new SimpleHeader with $name.
    * @param string $name
    * @param Swift_Mime_HeaderEncoder $encoder
+   * @param Swift_Mime_Grammar $grammar
    */
-  public function __construct($name, Swift_Mime_HeaderEncoder $encoder)
+  public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Mime_Grammar $grammar)
   {
     $this->setFieldName($name);
     $this->setEncoder($encoder);
+    parent::__construct($grammar);
   }
+  
   /**
    * Get the type of Header that this instance represents.
    * @return int
@@ -48,7 +49,7 @@ class Swift_Mime_Headers_UnstructuredHeader
   {
     return self::TYPE_TEXT;
   }
-
+  
   /**
    * Set the model for the field body.
    * This method takes a string for the field value.
@@ -58,7 +59,7 @@ class Swift_Mime_Headers_UnstructuredHeader
   {
     $this->setValue($model);
   }
-
+  
   /**
    * Get the model for the field body.
    * This method returns a string.
@@ -68,7 +69,7 @@ class Swift_Mime_Headers_UnstructuredHeader
   {
     return $this->getValue();
   }
-
+  
   /**
    * Get the (unencoded) value of this header.
    * @return string
@@ -77,7 +78,7 @@ class Swift_Mime_Headers_UnstructuredHeader
   {
     return $this->_value;
   }
-
+  
   /**
    * Set the (unencoded) value of this header.
    * @param string $value
@@ -87,7 +88,7 @@ class Swift_Mime_Headers_UnstructuredHeader
     $this->clearCachedValueIf($this->_value != $value);
     $this->_value = $value;
   }
-
+  
   /**
    * Get the value of this header prepared for rendering.
    * @return string
@@ -97,12 +98,10 @@ class Swift_Mime_Headers_UnstructuredHeader
     if (!$this->getCachedValue())
     {
       $this->setCachedValue(
-        str_replace('\\', '\\\\', $this->encodeWords(
-          $this, $this->_value, -1, $this->getCharset(), $this->getEncoder()
-          ))
+        $this->encodeWords($this, $this->_value)
         );
     }
     return $this->getCachedValue();
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 61b40ee..497f36e
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/MimeEntity.php';
 
 /**
  * A Message (RFC 2822) object.
- *
+ * 
  * @package Swift
  * @subpackage Mime
- *
+ * 
  * @author Chris Corbyn
  */
 interface Swift_Mime_Message extends Swift_Mime_MimeEntity
 {
-
+  
   /**
    * Generates a valid Message-ID and switches to it.
-   *
+   * 
    * @return string
    */
   public function generateId();
-
+  
   /**
    * Set the subject of the message.
-   *
+   * 
    * @param string $subject
    */
   public function setSubject($subject);
-
+  
   /**
    * Get the subject of the message.
-   *
+   * 
    * @return string
    */
   public function getSubject();
-
+  
   /**
    * Set the origination date of the message as a UNIX timestamp.
-   *
+   * 
    * @param int $date
    */
   public function setDate($date);
-
+  
   /**
    * Get the origination date of the message as a UNIX timestamp.
-   *
+   * 
    * @return int
    */
   public function getDate();
-
+  
   /**
    * Set the return-path (bounce-detect) address.
-   *
+   * 
    * @param string $address
    */
   public function setReturnPath($address);
-
+  
   /**
    * Get the return-path (bounce-detect) address.
-   *
+   * 
    * @return string
    */
   public function getReturnPath();
-
+  
   /**
    * Set the sender of this message.
-   *
+   * 
    * If multiple addresses are present in the From field, this SHOULD be set.
-   *
+   * 
    * According to RFC 2822 it is a requirement when there are multiple From
    * addresses, but Swift itself does not require it directly.
-   *
+   * 
    * An associative array (with one element!) can be used to provide a display-
    * name: i.e. array('email@address' => 'Real Name').
-   *
+   * 
    * If the second parameter is provided and the first is a string, then $name
    * is associated with the address.
-   *
+   * 
    * @param mixed $address
    * @param string $name optional
    */
   public function setSender($address, $name = null);
-
+  
   /**
    * Get the sender address for this message.
-   *
+   * 
    * This has a higher significance than the From address.
-   *
+   * 
    * @return string
    */
   public function getSender();
-
+  
   /**
    * Set the From address of this message.
-   *
+   * 
    * It is permissible for multiple From addresses to be set using an array.
-   *
+   * 
    * If multiple From addresses are used, you SHOULD set the Sender address and
    * according to RFC 2822, MUST set the sender address.
-   *
+   * 
    * An array can be used if display names are to be provided: i.e.
    * array('email@address.com' => 'Real Name').
-   *
+   * 
    * If the second parameter is provided and the first is a string, then $name
    * is associated with the address.
    *
@@ -116,115 +115,115 @@ interface Swift_Mime_Message extends Swift_Mime_MimeEntity
    * @param string $name optional
    */
   public function setFrom($addresses, $name = null);
-
+  
   /**
    * Get the From address(es) of this message.
-   *
+   * 
    * This method always returns an associative array where the keys are the
    * addresses.
-   *
+   * 
    * @return string[]
    */
   public function getFrom();
-
+  
   /**
    * Set the Reply-To address(es).
-   *
+   * 
    * Any replies from the receiver will be sent to this address.
-   *
+   * 
    * It is permissible for multiple reply-to addresses to be set using an array.
-   *
+   * 
    * This method has the same synopsis as {@link setFrom()} and {@link setTo()}.
-   *
+   * 
    * If the second parameter is provided and the first is a string, then $name
    * is associated with the address.
-   *
+   * 
    * @param mixed $addresses
    * @param string $name optional
    */
   public function setReplyTo($addresses, $name = null);
-
+  
   /**
    * Get the Reply-To addresses for this message.
-   *
+   * 
    * This method always returns an associative array where the keys provide the
    * email addresses.
-   *
+   * 
    * @return string[]
    */
   public function getReplyTo();
-
+  
   /**
    * Set the To address(es).
-   *
+   * 
    * Recipients set in this field will receive a copy of this message.
-   *
+   * 
    * This method has the same synopsis as {@link setFrom()} and {@link setCc()}.
-   *
+   * 
    * If the second parameter is provided and the first is a string, then $name
    * is associated with the address.
-   *
+   * 
    * @param mixed $addresses
    * @param string $name optional
    */
   public function setTo($addresses, $name = null);
-
+  
   /**
    * Get the To addresses for this message.
-   *
+   * 
    * This method always returns an associative array, whereby the keys provide
    * the actual email addresses.
-   *
+   * 
    * @return string[]
    */
   public function getTo();
-
+  
   /**
    * Set the Cc address(es).
-   *
+   * 
    * Recipients set in this field will receive a 'carbon-copy' of this message.
-   *
+   * 
    * This method has the same synopsis as {@link setFrom()} and {@link setTo()}.
-   *
+   * 
    * @param mixed $addresses
    * @param string $name optional
    */
   public function setCc($addresses, $name = null);
-
+  
   /**
    * Get the Cc addresses for this message.
-   *
+   * 
    * This method always returns an associative array, whereby the keys provide
    * the actual email addresses.
-   *
+   * 
    * @return string[]
    */
   public function getCc();
-
+  
   /**
    * Set the Bcc address(es).
-   *
+   * 
    * Recipients set in this field will receive a 'blind-carbon-copy' of this
    * message.
-   *
+   * 
    * In other words, they will get the message, but any other recipients of the
    * message will have no such knowledge of their receipt of it.
-   *
+   * 
    * This method has the same synopsis as {@link setFrom()} and {@link setTo()}.
-   *
+   * 
    * @param mixed $addresses
    * @param string $name optional
    */
   public function setBcc($addresses, $name = null);
-
+  
   /**
    * Get the Bcc addresses for this message.
-   *
+   * 
    * This method always returns an associative array, whereby the keys provide
    * the actual email addresses.
-   *
+   * 
    * @return string[]
    */
   public function getBcc();
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 36bafea..b46c296
@@ -8,9 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/InputByteStream.php';
-//@require 'Swift/Mime/EncodingObserver.php';
-//@require 'Swift/Mime/CharsetObserver.php';
 
 /**
  * A MIME entity, such as an attachment.
 interface Swift_Mime_MimeEntity
   extends Swift_Mime_CharsetObserver, Swift_Mime_EncodingObserver
 {
-
+  
   /** Main message document; there can only be one of these */
   const LEVEL_TOP = 16;
-
+  
   /** An entity which nests with the same precedence as an attachment */
   const LEVEL_MIXED = 256;
-
+  
   /** An entity which nests with the same precedence as a mime part */
   const LEVEL_ALTERNATIVE = 4096;
-
+  
   /** An entity which nests with the same precedence as embedded content */
   const LEVEL_RELATED = 65536;
-
+  
   /**
    * Get the level at which this entity shall be nested in final document.
    * The lower the value, the more outermost the entity will be nested.
@@ -41,13 +38,13 @@ interface Swift_Mime_MimeEntity
    * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE
    */
   public function getNestingLevel();
-
+  
   /**
    * Get the qualified content-type of this mime entity.
    * @return string
    */
   public function getContentType();
-
+  
   /**
    * Returns a unique ID for this entity.
    * For most entities this will likely be the Content-ID, though it has
@@ -58,51 +55,51 @@ interface Swift_Mime_MimeEntity
    * @return string
    */
   public function getId();
-
+  
   /**
    * Get all children nested inside this entity.
    * These are not just the immediate children, but all children.
    * @return Swift_Mime_MimeEntity[]
    */
   public function getChildren();
-
+  
   /**
    * Set all children nested inside this entity.
    * This includes grandchildren.
    * @param Swift_Mime_MimeEntity[] $children
    */
   public function setChildren(array $children);
-
+  
   /**
    * Get the collection of Headers in this Mime entity.
    * @return Swift_Mime_Header[]
    */
   public function getHeaders();
-
+  
   /**
    * Get the body content of this entity as a string.
    * Returns NULL if no body has been set.
    * @return string
    */
   public function getBody();
-
+  
   /**
    * Set the body content of this entity as a string.
    * @param string $body
    * @param string $contentType optional
    */
   public function setBody($body, $contentType = null);
-
+  
   /**
    * Get this entire entity in its string form.
    * @return string
    */
   public function toString();
-
+  
   /**
    * Get this entire entity as a ByteStream.
    * @param Swift_InputByteStream $is to write to
    */
   public function toByteStream(Swift_InputByteStream $is);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index a053959..37b7b09
@@ -8,59 +8,57 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/SimpleMimeEntity.php';
-//@require 'Swift/Mime/ContentEncoder.php';
-//@require 'Swift/Mime/HeaderSet.php';
-//@require 'Swift/KeyCache.php';
 
 /**
  * A MIME part, in a multipart message.
- *
+ * 
  * @package Swift
  * @subpackage Mime
  * @author Chris Corbyn
  */
 class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
 {
-
+  
   /** The format parameter last specified by the user */
   protected $_userFormat;
-
+  
   /** The charset last specified by the user */
   protected $_userCharset;
-
+  
   /** The delsp parameter last specified by the user */
   protected $_userDelSp;
-
+  
   /** The nesting level of this MimePart */
   private $_nestingLevel = self::LEVEL_ALTERNATIVE;
-
+  
   /**
    * Create a new MimePart with $headers, $encoder and $cache.
-   *
+   * 
    * @param Swift_Mime_HeaderSet $headers
    * @param Swift_Mime_ContentEncoder $encoder
    * @param Swift_KeyCache $cache
+   * @param Swift_Mime_Grammar $grammar
    * @param string $charset
    */
   public function __construct(Swift_Mime_HeaderSet $headers,
-    Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, $charset = null)
+    Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_Mime_Grammar $grammar, $charset = null)
   {
-    parent::__construct($headers, $encoder, $cache);
+    parent::__construct($headers, $encoder, $cache, $grammar);
     $this->setContentType('text/plain');
     if (!is_null($charset))
     {
       $this->setCharset($charset);
     }
   }
-
+  
   /**
    * Set the body of this entity, either as a string, or as an instance of
    * {@link Swift_OutputByteStream}.
-   *
+   * 
    * @param mixed $body
    * @param string $contentType optional
    * @param string $charset optional
+   * @param Swift_Mime_MimePart
    */
   public function setBody($body, $contentType = null, $charset = null)
   {
@@ -71,21 +69,22 @@ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
     }
     return $this;
   }
-
+  
   /**
    * Get the character set of this entity.
-   *
+   * 
    * @return string
    */
   public function getCharset()
   {
     return $this->_getHeaderParameter('Content-Type', 'charset');
   }
-
+  
   /**
    * Set the character set of this entity.
-   *
+   * 
    * @param string $charset
+   * @param Swift_Mime_MimePart
    */
   public function setCharset($charset)
   {
@@ -98,21 +97,22 @@ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
     parent::charsetChanged($charset);
     return $this;
   }
-
+  
   /**
    * Get the format of this entity (i.e. flowed or fixed).
-   *
+   * 
    * @return string
    */
   public function getFormat()
   {
     return $this->_getHeaderParameter('Content-Type', 'format');
   }
-
+  
   /**
    * Set the format of this entity (flowed or fixed).
-   *
+   * 
    * @param string $format
+   * @param Swift_Mime_MimePart
    */
   public function setFormat($format)
   {
@@ -120,10 +120,10 @@ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
     $this->_userFormat = $format;
     return $this;
   }
-
+  
   /**
    * Test if delsp is being used for this entity.
-   *
+   * 
    * @return boolean
    */
   public function getDelSp()
@@ -132,11 +132,12 @@ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
       ? true
       : false;
   }
-
+  
   /**
    * Turn delsp on or off for this entity.
-   *
+   * 
    * @param boolean $delsp
+   * @param Swift_Mime_MimePart
    */
   public function setDelSp($delsp = true)
   {
@@ -144,10 +145,10 @@ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
     $this->_userDelSp = $delsp;
     return $this;
   }
-
+  
   /**
    * Get the nesting level of this entity.
-   *
+   * 
    * @return int
    * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED
    */
@@ -155,20 +156,20 @@ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
   {
     return $this->_nestingLevel;
   }
-
+  
   /**
    * Receive notification that the charset has changed on this document, or a
    * parent document.
-   *
+   * 
    * @param string $charset
    */
   public function charsetChanged($charset)
   {
     $this->setCharset($charset);
   }
-
+  
   // -- Protected methods
-
+  
   /** Fix the content-type and encoding of this entity */
   protected function _fixHeaders()
   {
@@ -186,11 +187,11 @@ class Swift_Mime_MimePart extends Swift_Mime_SimpleMimeEntity
       $this->setDelSp($this->_userDelSp);
     }
   }
-
+  
   /** Set the nesting level of this entity */
   protected function _setNestingLevel($level)
   {
     $this->_nestingLevel = $level;
   }
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index 8c7e04c..12e3586
@@ -8,7 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/Header.php';
 
 /**
  * A MIME Header with parameters.
  */
 interface Swift_Mime_ParameterizedHeader extends Swift_Mime_Header
 {
-
+  
   /**
    * Set the value of $parameter.
    * @param string $parameter
    * @param string $value
    */
   public function setParameter($parameter, $value);
-
+  
   /**
    * Get the value of $parameter.
    * @return string
    */
   public function getParameter($parameter);
-
+  
 }
old mode 100644 (file)
new mode 100755 (executable)
index d84e388..35156d3
@@ -8,15 +8,6 @@
  * file that was distributed with this source code.
  */
 
-//@require 'Swift/Mime/HeaderFactory.php';
-//@require 'Swift/Mime/HeaderEncoder.php';
-//@require 'Swift/Encoder.php';
-//@require 'Swift/Mime/Headers/MailboxHeader.php';
-//@require 'Swift/Mime/Headers/DateHeader.php';
-//@require 'Swift/Mime/Headers/UnstructuredHeader.php';
-//@require 'Swift/Mime/Headers/ParameterizedHeader.php';
-//@require 'Swift/Mime/Headers/IdentificationHeader.php';
-//@require 'Swift/Mime/Headers/PathHeader.php';
 
 /**
  * Creates MIME headers.
@@ -29,27 +20,32 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
 
   /** The HeaderEncoder used by these headers */
   private $_encoder;
-
+  
   /** The Encoder used by parameters */
   private $_paramEncoder;
-
+  
+  /** The Grammar */
+  private $_grammar;
+  
   /** The charset of created Headers */
   private $_charset;
-
+  
   /**
    * Creates a new SimpleHeaderFactory using $encoder and $paramEncoder.
    * @param Swift_Mime_HeaderEncoder $encoder
    * @param Swift_Encoder $paramEncoder
+   * @param Swift_Mime_Grammar $grammar
    * @param string $charset
    */
   public function __construct(Swift_Mime_HeaderEncoder $encoder,
-    Swift_Encoder $paramEncoder, $charset = null)
+    Swift_Encoder $paramEncoder, Swift_Mime_Grammar $grammar, $charset = null)
   {
     $this->_encoder = $encoder;
     $this->_paramEncoder = $paramEncoder;
+    $this->_grammar = $grammar;
     $this->_charset = $charset;
   }
-
+  
   /**
    * Create a new Mailbox Header with a list of $addresses.
    * @param string $name
@@ -58,7 +54,7 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
    */
   public function createMailboxHeader($name, $addresses = null)
   {
-    $header = new Swift_Mime_Headers_MailboxHeader($name, $this->_encoder);
+    $header = new Swift_Mime_Headers_MailboxHeader($name, $this->_encoder, $this->_grammar);
     if (isset($addresses))
     {
       $header->setFieldBodyModel($addresses);
@@ -66,7 +62,7 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
     $this->_setHeaderCharset($header);
     return $header;
   }
-
+  
   /**
    * Create a new Date header using $timestamp (UNIX time).
    * @param string $name
@@ -75,7 +71,7 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
    */
   public function createDateHeader($name, $timestamp = null)
   {
-    $header = new Swift_Mime_Headers_DateHeader($name);
+    $header = new Swift_Mime_Headers_DateHeader($name, $this->_grammar);
     if (isset($timestamp))
     {
       $header->setFieldBodyModel($timestamp);
@@ -83,7 +79,7 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
     $this->_setHeaderCharset($header);
     return $header;
   }
-
+  
   /**
    * Create a new basic text header with $name and $value.
    * @param string $name
@@ -92,7 +88,7 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
    */
   public function createTextHeader($name, $value = null)
   {
-    $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->_encoder);
+    $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->_encoder, $this->_grammar);
     if (isset($value))
     {
       $header->setFieldBodyModel($value);
@@ -100,7 +96,7 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
     $this->_setHeaderCharset($header);
     return $header;
   }
-
+  
   /**
    * Create a new ParameterizedHeader with $name, $value and $params.
    * @param string $name
@@ -114,7 +110,8 @@ class Swift_Mime_SimpleHeaderFactory implements Swift_Mime_HeaderFactory
     $header = new Swift_Mime_Headers_ParameterizedHeader($name,
       $this->_encoder, (strtolower($name) == 'content-disposition')
         ? $this->_paramEncoder
-        : null
+        : null,
+        $this->_grammar
       );
 &nb