diff options
Diffstat (limited to 'External/swiftmailer/lib/classes/Swift/ByteStream')
3 files changed, 545 insertions, 0 deletions
| diff --git a/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php new file mode 100755 index 0000000..71bc3f1 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php @@ -0,0 +1,178 @@ +<?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. + */ + +//@require 'Swift/InputByteStream.php'; +//@require 'Swift/Filterable.php'; +//@require 'Swift/StreamFilter.php'; + +/** + * Provides the base functionality for an InputStream supporting filters. + * @package Swift + * @subpackage ByteStream + * @author Chris Corbyn + */ +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 +   * @param string $key +   */ +  public function addFilter(Swift_StreamFilter $filter, $key) +  { +    $this->_filters[$key] = $filter; +  } +   +  /** +   * Remove an already present StreamFilter based on its $key. +   * @param string $key +   */ +  public function removeFilter($key) +  { +    unset($this->_filters[$key]); +  } +   +  /** +   * Writes $bytes to the end of the stream. +   * @param string $bytes +   * @throws Swift_IoException +   */ +  public function write($bytes) +  { +    $this->_writeBuffer .= $bytes; +    foreach ($this->_filters as $filter) +    { +      if ($filter->shouldBuffer($this->_writeBuffer)) +      { +        return; +      } +    } +    $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) +  { +    foreach ($this->_mirrors as $k => $stream) +    { +      if ($is === $stream) +      { +        if ($this->_writeBuffer !== '') +        { +          $stream->write($this->_filter($this->_writeBuffer)); +        } +        unset($this->_mirrors[$k]); +      } +    } +  } +   +  /** +   * Flush the contents of the stream (empty it) and set the internal pointer +   * to the beginning. +   * @throws Swift_IoException +   */ +  public function flushBuffers() +  { +    if ($this->_writeBuffer !== '') +    { +      $this->_doWrite($this->_writeBuffer); +    } +    $this->_flush(); +     +    foreach ($this->_mirrors as $stream) +    { +      $stream->flushBuffers(); +    } +  } +   +  // -- Private methods +   +  /** Run $bytes through all filters */ +  private function _filter($bytes) +  { +    foreach ($this->_filters as $filter) +    { +      $bytes = $filter->filter($bytes); +    } +    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 = ''; +  } +   +} diff --git a/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php new file mode 100755 index 0000000..f918889 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php @@ -0,0 +1,190 @@ +<?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. + */ + +//@require 'Swift/InputByteStream.php'; +//@require 'Swift/OutputByteStream.php'; + +/** + * Allows reading and writing of bytes to and from an array. + * @package Swift + * @subpackage ByteStream + * @author Chris Corbyn + */ +class Swift_ByteStream_ArrayByteStream +  implements Swift_InputByteStream, Swift_OutputByteStream +{ + +  /** +   * The internal stack of bytes. +   * @var string[] +   * @access private +   */ +  private $_array = array(); + +  /** +   * The size of the stack +   * @var int +   * @access private +   */ +  private $_arraySize = 0; + +  /** +   * The internal pointer offset. +   * @var int +   * @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. +   * @param mixed $stack of bytes in string or array form, optional +   */ +  public function __construct($stack = null) +  { +    if (is_array($stack)) +    { +      $this->_array = $stack; +      $this->_arraySize = count($stack); +    } +    elseif (is_string($stack)) +    { +      $this->write($stack); +    } +    else +    { +      $this->_array = array(); +    } +  } + +  /** +   * 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 +   * remaining bytes are given instead. If no bytes are remaining at all, boolean +   * false is returned. +   * @param int $length +   * @return string +   */ +  public function read($length) +  { +    if ($this->_offset == $this->_arraySize) +    { +      return false; +    } + +    // Don't use array slice +    $end = $length + $this->_offset; +    $end = $this->_arraySize<$end +      ?$this->_arraySize +      :$end; +    $ret = ''; +    for (; $this->_offset < $end; ++$this->_offset) +    { +      $ret .= $this->_array[$this->_offset]; +    } +    return $ret; +  } + +  /** +   * Writes $bytes to the end of the stream. +   * @param string $bytes +   */ +  public function write($bytes) +  { +    $to_add = str_split($bytes); +    foreach ($to_add as $value) +    { +      $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. +   * 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) +  { +    foreach ($this->_mirrors as $k => $stream) +    { +      if ($is === $stream) +      { +        unset($this->_mirrors[$k]); +      } +    } +  } + +  /** +   * Move the internal read pointer to $byteOffset in the stream. +   * @param int $byteOffset +   * @return boolean +   */ +  public function setReadPointer($byteOffset) +  { +    if ($byteOffset > $this->_arraySize) +    { +      $byteOffset = $this->_arraySize; +    } +    elseif ($byteOffset < 0) +    { +      $byteOffset = 0; +    } + +    $this->_offset = $byteOffset; +  } + +  /** +   * Flush the contents of the stream (empty it) and set the internal pointer +   * to the beginning. +   */ +  public function flushBuffers() +  { +    $this->_offset = 0; +    $this->_array = array(); +    $this->_arraySize = 0; +     +    foreach ($this->_mirrors as $stream) +    { +      $stream->flushBuffers(); +    } +  } + +} diff --git a/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php new file mode 100755 index 0000000..14773c2 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php @@ -0,0 +1,177 @@ +<?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. + */ + +//@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. + * @package Swift + * @subpackage ByteStream + * @author Chris Corbyn + */ +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; +   +  /** +   * Create a new FileByteStream for $path. +   * @param string $path +   * @param string $writable if true +   */ +  public function __construct($path, $writable = false) +  { +    $this->_path = $path; +    $this->_mode = $writable ? 'w+b' : 'rb'; +    $this->_quotes = get_magic_quotes_runtime(); +  } +   +  /** +   * Get the complete path to the file. +   * @return string +   */ +  public function getPath() +  { +    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 +   * remaining bytes are given instead. If no bytes are remaining at all, boolean +   * false is returned. +   * @param int $length +   * @return string +   * @throws Swift_IoException +   */ +  public function read($length) +  { +    $fp = $this->_getReadHandle(); +    if (!feof($fp)) +    { +      if ($this->_quotes) +      { +        set_magic_quotes_runtime(0); +      } +      $bytes = fread($fp, $length); +      if ($this->_quotes) +      { +        set_magic_quotes_runtime(1); +      } +      $this->_offset = ftell($fp); +      return $bytes; +    } +    else +    { +      return false; +    } +  } +   +  /** +   * Move the internal read pointer to $byteOffset in the stream. +   * @param int $byteOffset +   * @return boolean +   */ +  public function setReadPointer($byteOffset) +  { +    if (isset($this->_reader)) +    { +      fseek($this->_reader, $byteOffset, SEEK_SET); +    } +    $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() +  { +    if (!isset($this->_reader)) +    { +      if (!$this->_reader = fopen($this->_path, 'rb')) +      { +        throw new Swift_IoException( +          'Unable to open file for reading [' . $this->_path . ']' +          ); +      } +      fseek($this->_reader, $this->_offset, SEEK_SET); +    } +    return $this->_reader; +  } +   +  /** Get the resource for writing */ +  private function _getWriteHandle() +  { +    if (!isset($this->_writer)) +    { +      if (!$this->_writer = fopen($this->_path, $this->_mode)) +      { +        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() +  { +    if (isset($this->_reader)) +    { +      fclose($this->_reader); +      $this->_reader = null; +    } +  } +   +} | 
