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

Source for file Udp.php

Documentation is available at Udp.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: Udp.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 0.9.0
  44.  */
  45.  
  46. /**
  47.  * Growl implements UDP protocol
  48.  *
  49.  * @category Networking
  50.  * @package  Net_Growl
  51.  * @author   Laurent Laville <pear@laurent-laville.org>
  52.  * @author   Bertrand Mansion <bmansion@mamasam.com>
  53.  * @license  http://www.opensource.org/licenses/bsd-license.php  BSD
  54.  * @version  Release: 2.7.0
  55.  * @link     http://growl.laurent-laville.org/
  56.  * @link     http://pear.php.net/package/Net_Growl
  57.  * @link     http://growl.info Growl Homepage
  58.  * @since    Class available since Release 0.9.0
  59.  */
  60. class Net_Growl_Udp extends Net_Growl
  61. {
  62.     /**
  63.      * Class constructor
  64.      *
  65.      * @param mixed  &$application  Can be either a Net_Growl_Application object
  66.      *                               or the application name string
  67.      * @param array  $notifications List of notification types
  68.      * @param string $password      (optional) Password for Growl
  69.      * @param array  $options       (optional) List of options : 'host', 'port',
  70.      *                               'protocol', 'timeout' for Growl socket server.
  71.      *                               'debug' to know what data are sent and received.
  72.      */
  73.     public function __construct(&$application$notifications = array(),
  74.         $password ''$options = array()
  75.     {
  76.         parent::__construct($application$notifications$password$options);
  77.     }
  78.  
  79.     /**
  80.      * Sends the REGISTER message type
  81.      *
  82.      * @return true 
  83.      * @throws Net_Growl_Exception if remote server communication failure
  84.      */
  85.     public function sendRegister()
  86.     {
  87.         $appName       $this->utf8Encode($this->getApplication()->getGrowlName());
  88.         $password      $this->getApplication()->getGrowlPassword();
  89.         $nameEnc       $defaultEnc '';
  90.         $nameCnt       $defaultCnt = 0;
  91.         $notifications $this->getApplication()->getGrowlNotifications();
  92.  
  93.         foreach ($notifications as $name => $options{
  94.             if (is_array($options&& !empty($options['enabled'])) {
  95.                 $defaultEnc .= pack('c'$nameCnt);
  96.                 $defaultCnt++;
  97.             }
  98.  
  99.             $name $this->utf8Encode($name);
  100.             $nameEnc .= pack('n'$this->strByteLen($name)).$name;
  101.             $nameCnt++;
  102.         }
  103.  
  104.         // Version of the Growl protocol used in this package
  105.         $_growl_protocol_version = 1;
  106.         // Packet of type Registration
  107.         $_growl_type_registration = 0;
  108.  
  109.         $data pack(
  110.             'c2nc2',
  111.             $_growl_protocol_version,
  112.             $_growl_type_registration,
  113.             $this->strByteLen($appName),
  114.             $nameCnt,
  115.             $defaultCnt
  116.         );
  117.  
  118.         $data .= $appName $nameEnc $defaultEnc;
  119.         $data .= pack('H32'md5($data $password));
  120.  
  121.         return $this->sendRequest('REGISTER'$data);
  122.     }
  123.  
  124.     /**
  125.      * Sends the NOTIFY message type
  126.      *
  127.      * @param string $name        Notification name
  128.      * @param string $title       Notification title
  129.      * @param string $description Notification description
  130.      * @param string $options     Notification options
  131.      *
  132.      * @return true 
  133.      * @throws Net_Growl_Exception if remote server communication failure
  134.      */
  135.     public function sendNotify($name$title$description$options)
  136.     {
  137.         $appName     $this->utf8Encode($this->getApplication()->getGrowlName());
  138.         $password    $this->getApplication()->getGrowlPassword();
  139.         $name        $this->utf8Encode($name);
  140.         $title       $this->utf8Encode($title);
  141.         $description $this->utf8Encode($description);
  142.         $priority    = isset($options['priority'])
  143.             ? $options['priority'Net_Growl::PRIORITY_NORMAL;
  144.  
  145.         $flags ($priority 7* 2;
  146.  
  147.         if ($priority < 0{
  148.             $flags |= 8;
  149.         }
  150.         if (isset($options['sticky']&& $options['sticky'=== true{
  151.             $flags $flags | 1;
  152.         }
  153.  
  154.         // Version of the Growl protocol used in this package
  155.         $_growl_protocol_version = 1;
  156.         // Packet of type Notification
  157.         $_growl_type_notification = 1;
  158.  
  159.         $data pack(
  160.             'c2n5',
  161.             $_growl_protocol_version,
  162.             $_growl_type_notification,
  163.             $flags,
  164.             $this->strByteLen($name),
  165.             $this->strByteLen($title),
  166.             $this->strByteLen($description),
  167.             $this->strByteLen($appName)
  168.         );
  169.  
  170.         $data .= $name $title $description $appName;
  171.         $data .= pack('H32'md5($data $password));
  172.  
  173.         return $this->sendRequest('NOTIFY'$data);
  174.     }
  175. }

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