Net_Growl
[ class tree: Net_Growl ] [ index: Net_Growl ] [ all elements ]

Source for file Response.php

Documentation is available at Response.php

  1. <?php
  2. /**
  3.  * Copyright (c) 2009-2013, Laurent Laville <pear@laurent-laville.org>
  4.  *                          Bertrand Mansion <bmansion@mamasam.com>
  5.  *
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  *
  12.  *     * Redistributions of source code must retain the above copyright
  13.  *       notice, this list of conditions and the following disclaimer.
  14.  *     * Redistributions in binary form must reproduce the above copyright
  15.  *       notice, this list of conditions and the following disclaimer in the
  16.  *       documentation and/or other materials provided with the distribution.
  17.  *     * Neither the name of the authors nor the names of its contributors
  18.  *       may be used to endorse or promote products derived from this software
  19.  *       without specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  22.  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24.  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  25.  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  26.  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  27.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  28.  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  29.  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  30.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  31.  * POSSIBILITY OF SUCH DAMAGE.
  32.  *
  33.  * PHP version 5
  34.  *
  35.  * @category Networking
  36.  * @package  Net_Growl
  37.  * @author   Laurent Laville <pear@laurent-laville.org>
  38.  * @author   Bertrand Mansion <bmansion@mamasam.com>
  39.  * @license  http://www.opensource.org/licenses/bsd-license.php  BSD
  40.  * @version  SVN: $Id: Response.php 329265 2013-01-22 17:51:31Z farell $
  41.  * @link     http://growl.laurent-laville.org/
  42.  * @link     http://pear.php.net/package/Net_Growl
  43.  * @since    File available since Release 2.1.0
  44.  */
  45.  
  46. /**
  47.  * Class representing a Growl response using GNTP protocol
  48.  *
  49.  * The class is designed to be used to get additionnal information
  50.  * on the response received.
  51.  * <code>
  52.  *  $growl = Net_Growl::singleton($appName, $notifications, $password, $options);
  53.  *
  54.  *  $response = $growl->register();
  55.  *
  56.  *  if ($response->getStatus() != 'OK') {
  57.  *      echo $response->getStatus() . ' ' .
  58.  *           $response->getErrorCode() . ' ' .
  59.  *           $response->getErrorDescription();
  60.  *  }
  61.  * </code>
  62.  *
  63.  * @category Networking
  64.  * @package  Net_Growl
  65.  * @author   Laurent Laville <pear@laurent-laville.org>
  66.  * @author   Bertrand Mansion <bmansion@mamasam.com>
  67.  * @license  http://www.opensource.org/licenses/bsd-license.php  BSD
  68.  * @version  Release: 2.7.0
  69.  * @link     http://growl.laurent-laville.org/
  70.  * @link     http://pear.php.net/package/Net_Growl
  71.  * @link     http://www.growlforwindows.com/gfw/help/gntp.aspx#responses
  72.  * @since    Class available since Release 2.1.0
  73.  */
  74. {
  75.     /**
  76.      * GNTP protocol version
  77.      * @var string 
  78.      * @see getVersion()
  79.      */
  80.     protected $version;
  81.  
  82.     /**
  83.      * Status code
  84.      * @var string 
  85.      * @see getStatus()
  86.      */
  87.     protected $code;
  88.  
  89.     /**
  90.      * Request action
  91.      * @var string 
  92.      * @see getResponseAction()
  93.      */
  94.     protected $action;
  95.  
  96.     /**
  97.      * Error code
  98.      * @var integer 
  99.      * @see getErrorCode()
  100.      */
  101.     protected $errorCode;
  102.  
  103.     /**
  104.      * Error description
  105.      * @var string 
  106.      * @see getErrorDescription()
  107.      */
  108.     protected $errorDescription;
  109.  
  110.     /**
  111.      * The machine name/host name of the sending computer
  112.      * @var string 
  113.      * @see getOriginMachineName()
  114.      */
  115.     protected $machineName;
  116.  
  117.     /**
  118.      * The identity of the sending framework
  119.      * @var string 
  120.      * @see getOriginSoftwareName()
  121.      */
  122.     protected $softwareName;
  123.  
  124.     /**
  125.      * The version of the sending framework
  126.      * @var string 
  127.      * @see getOriginSoftwareVersion()
  128.      */
  129.     protected $softwareVersion;
  130.  
  131.     /**
  132.      * The identify of the sending computer OS/platform
  133.      * @var string 
  134.      * @see getOriginPlatformName()
  135.      */
  136.     protected $platformName;
  137.  
  138.     /**
  139.      * The version of the the sending computer OS/platform
  140.      * @var string 
  141.      * @see getOriginPlatformVersion()
  142.      */
  143.     protected $platformVersion;
  144.  
  145.     /**
  146.      * Response body
  147.      * @var string 
  148.      * @see appendBody()
  149.      */
  150.     protected $body;
  151.  
  152.     /**
  153.      * Constructor, parses the response status line
  154.      *
  155.      * @param string $statusLine Response status line (e.g. "GNTP/1.0 -OK NONE")
  156.      *
  157.      * @throws Net_Growl_Exception if status line is invalid according to spec
  158.      * @link   http://www.growlforwindows.com/gfw/help/gntp.aspx
  159.      */
  160.     public function __construct($statusLine)
  161.     {
  162.         if (!preg_match('!^GNTP/(\d\.\d)\s\-([^\s]+)\s(.+)?$!'$statusLine$m)) {
  163.             throw new Net_Growl_Exception("Malformed response: {$statusLine}");
  164.         }
  165.         $this->version = $m[1];
  166.         $this->code    = $m[2];
  167.         $this->body    = '';
  168.     }
  169.  
  170.     /**
  171.      * Appends a string to the response body excluding
  172.      * the protocol identifier, version, message type, and encryption algorithm id
  173.      *
  174.      * Should be used only by Mock adapter intended for testing
  175.      *
  176.      * @param string $bodyChunk Part or full body response
  177.      *
  178.      * @return void 
  179.      * @see Net_Growl_GntpMock::createResponseFromString(),
  180.      *       Net_Growl_GntpMock::createResponseFromFile()
  181.      */
  182.     public function appendBody($bodyChunk)
  183.     {
  184.         $this->body .= $bodyChunk;
  185.  
  186.         $parts preg_split('!(\r?\n){1}!m'$this->body);
  187.  
  188.         foreach ($parts as $part{
  189.             if (preg_match('/^Response-Action: (.*)$/'$part$m)) {
  190.                 $this->action = $m[1];
  191.             }
  192.             /**
  193.              * For messagetype -ERROR,
  194.              * the following headers may also be returned:
  195.              */
  196.             if (preg_match('/^Error-Code: (.*)$/'$part$m)) {
  197.                 $this->errorCode = $m[1];
  198.             }
  199.             if (preg_match('/^Error-Description: (.*)$/'$part$m)) {
  200.                 $this->errorDescription = $m[1];
  201.             }
  202.  
  203.             /**
  204.              * For all types of responses,
  205.              * the following generic headers may also be returned:
  206.              */
  207.             if (preg_match('/^Origin-Machine-Name: (.*)$/'$part$m)) {
  208.                 $this->machineName = $m[1];
  209.             }
  210.             if (preg_match('/^Origin-Software-Name: (.*)$/'$part$m)) {
  211.                 $this->softwareName = $m[1];
  212.             }
  213.             if (preg_match('/^Origin-Software-Version: (.*)$/'$part$m)) {
  214.                 $this->softwareVersion = $m[1];
  215.             }
  216.             if (preg_match('/^Origin-Platform-Name: (.*)$/'$part$m)) {
  217.                 $this->platformName = $m[1];
  218.             }
  219.             if (preg_match('/^Origin-Platform-Version: (.*)$/'$part$m)) {
  220.                 $this->platformVersion = $m[1];
  221.             }
  222.         }
  223.     }
  224.  
  225.     /**
  226.      * Returns GNTP protocol version (e.g. 1.0, 1.1)
  227.      *
  228.      * @return string 
  229.      */
  230.     public function getVersion()
  231.     {
  232.         return $this->version;
  233.     }
  234.  
  235.     /**
  236.      * Returns the status code (OK | ERROR)
  237.      *
  238.      * @return string 
  239.      */
  240.     public function getStatus()
  241.     {
  242.         return $this->code;
  243.     }
  244.  
  245.     /**
  246.      * Returns the request action (REGITER | NOTIFY)
  247.      *
  248.      * @return string 
  249.      */
  250.     public function getResponseAction()
  251.     {
  252.         return $this->action;
  253.     }
  254.  
  255.     /**
  256.      * Returns the error code
  257.      *
  258.      * 200 - TIMED_OUT
  259.      *       The server timed out waiting for the request to complete
  260.      * 201 - NETWORK_FAILURE
  261.      *       The server was unavailable
  262.      *       or the client could not reach the server for any reason
  263.      * 300 - INVALID_REQUEST
  264.      *       The request contained an unsupported directive,
  265.      *       invalid headers or values, or was otherwise malformed
  266.      * 301 - UNKNOWN_PROTOCOL
  267.      *       The request was not a GNTP request
  268.      * 302 - UNKNOWN_PROTOCOL_VERSION
  269.      *       The request specified an unknown or unsupported GNTP version
  270.      * 303 - REQUIRED_HEADER_MISSING
  271.      *       The request was missing required information
  272.      * 400 - NOT_AUTHORIZED
  273.      *       The request supplied a missing or wrong password/key
  274.      *       or was otherwise not authorized
  275.      * 401 - UNKNOWN_APPLICATION
  276.      *       Application is not registered to send notifications
  277.      * 402 - UNKNOWN_NOTIFICATION
  278.      *       Notification type is not registered by the application
  279.      * 500 - INTERNAL_SERVER_ERROR
  280.      *       An internal server error occurred while processing the request
  281.      *
  282.      * @return integer 
  283.      */
  284.     public function getErrorCode()
  285.     {
  286.         return $this->errorCode;
  287.     }
  288.  
  289.     /**
  290.      * Returns the error description
  291.      *
  292.      * @return string 
  293.      * @see getErrorCode()
  294.      */
  295.     public function getErrorDescription()
  296.     {
  297.         return $this->errorDescription;
  298.     }
  299.  
  300.     /**
  301.      * Returns the machine name/host name of the sending computer
  302.      *
  303.      * @return string 
  304.      */
  305.     public function getOriginMachineName()
  306.     {
  307.         return $this->machineName;
  308.     }
  309.  
  310.     /**
  311.      * Returns the identity of the sending framework
  312.      * Example1: Growl/Win
  313.      * Example2: GrowlAIRConnector
  314.      *
  315.      * @return string 
  316.      */
  317.     public function getOriginSoftwareName()
  318.     {
  319.         return $this->softwareName;
  320.     }
  321.  
  322.     /**
  323.      * Returns the version of the sending framework.
  324.      * Example1: 2.0.0.28
  325.      * Example2: 1.2
  326.      *
  327.      * @return string 
  328.      */
  329.     public function getOriginSoftwareVersion()
  330.     {
  331.         return $this->softwareVersion;
  332.     }
  333.  
  334.     /**
  335.      * Returns the identify of the sending computer OS/platform
  336.      * Example1: Microsoft Windows NT 5.1.2600 Service Pack 3
  337.      * Example2: Mac OS X
  338.      *
  339.      * @return string 
  340.      */
  341.     public function getOriginPlatformName()
  342.     {
  343.         return $this->platformName;
  344.     }
  345.  
  346.     /**
  347.      * Returns the version of the sending computer OS/platform
  348.      * Example1: 5.1.2600.196608
  349.      * Example2: 10.6
  350.      *
  351.      * @return string 
  352.      */
  353.     public function getOriginPlatformVersion()
  354.     {
  355.         return $this->platformVersion;
  356.     }
  357.  
  358.     /**
  359.      * Returns the String representation of the Growl response
  360.      * Example1: Response REGISTER OK (Growl/Win 2.0.0.28)
  361.      * Example2: Response ERROR 402 No notifications registered (Growl/Win 2.0.0.28)
  362.      *
  363.      * @return string 
  364.      */
  365.     public function __toString()
  366.     {
  367.         $str  rtrim("Response " $this->getResponseAction());
  368.         $str .= ' ' $this->getStatus();
  369.  
  370.         if ($this->getStatus(== 'ERROR'{
  371.             $str .= sprintf(
  372.                 ' %s %s',
  373.                 $this->getErrorCode(),
  374.                 $this->getErrorDescription()
  375.             );
  376.         }
  377.         $str .= sprintf(
  378.             ' (%s %s)',
  379.             $this->getOriginSoftwareName(),
  380.             $this->getOriginSoftwareVersion()
  381.         );
  382.         return $str;
  383.     }
  384. }

Documentation generated on Tue, 29 Jan 2013 18:30:06 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.