diff options
author | Scott Ullrich <sullrich@pfsense.org> | 2009-07-09 00:40:48 -0400 |
---|---|---|
committer | Scott Ullrich <sullrich@pfsense.org> | 2009-07-09 00:40:48 -0400 |
commit | 2b4aace018e0f155008f7fff8ca1c09737ca9251 (patch) | |
tree | c816144493ba0412af7de37d84e77bbc79ad8f6d /etc/inc | |
parent | c14aeb0ee8e1117e77c09760771ccdf0002821e6 (diff) | |
download | pfsense-2b4aace018e0f155008f7fff8ca1c09737ca9251.zip pfsense-2b4aace018e0f155008f7fff8ca1c09737ca9251.tar.gz |
Adding growl class which can be used to send growl alerts. Will add the GUI bits in a bit.
Diffstat (limited to 'etc/inc')
-rw-r--r-- | etc/inc/growl.class | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/etc/inc/growl.class b/etc/inc/growl.class new file mode 100644 index 0000000..c819021 --- /dev/null +++ b/etc/inc/growl.class @@ -0,0 +1,92 @@ +<?PHP + class Growl + { + const GROWL_PRIORITY_LOW = -2; + const GROWL_PRIORITY_MODERATE = -1; + const GROWL_PRIORITY_NORMAL = 0; + const GROWL_PRIORITY_HIGH = 1; + const GROWL_PRIORITY_EMERGENCY = 2; + + private $appName; + private $address; + private $notifications; + private $password; + private $port; + + public function __construct($address, $password = '', $app_name = 'PHP Growl') + { + $this->appName = utf8_encode($app_name); + $this->address = $address; + $this->notifications = array(); + $this->password = $password; + $this->port = 9887; + } + + public function addNotification($name, $enabled = true) + { + $this->notifications[] = array('name' => utf8_encode($name), 'enabled' => $enabled); + } + + public function register() + { + $data = ''; + $defaults = ''; + $num_defaults = 0; + + for($i = 0; $i < count($this->notifications); $i++) + { + $data .= pack('n', strlen($this->notifications[$i]['name'])) . $this->notifications[$i]['name']; + if($this->notifications[$i]['enabled']) + { + $defaults .= pack('c', $i); + $num_defaults++; + } + } + + // pack(Protocol version, type, app name, number of notifications to register) + $data = pack('c2nc2', 1, 0, strlen($this->appName), count($this->notifications), $num_defaults) . $this->appName . $data . $defaults; + $data .= pack('H32', md5($data . $this->password)); + + return $this->send($data); + } + + public function notify($name, $title, $message, $priority = 0, $sticky = false) + { + $name = utf8_encode($name); + $title = utf8_encode($title); + $message = utf8_encode($message); + $priority = intval($priority); + + $flags = ($priority & 7) * 2; + if($priority < 0) $flags |= 8; + if($sticky) $flags |= 1; + + // pack(protocol version, type, priority/sticky flags, notification name length, title length, message length. app name length) + $data = pack('c2n5', 1, 1, $flags, strlen($name), strlen($title), strlen($message), strlen($this->appName)); + $data .= $name . $title . $message . $this->appName; + $data .= pack('H32', md5($data . $this->password)); + + return $this->send($data); + } + + private function send($data) + { + if(function_exists('socket_create') && function_exists('socket_sendto')) + { + $sck = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); + socket_sendto($sck, $data, strlen($data), 0x100, $this->address, $this->port); + return true; + } + elseif(function_exists('fsockopen')) + { + $fp = fsockopen('udp://' . $this->address, $this->port); + fwrite($fp, $data); + fclose($fp); + return true; + } + + return false; + } + } + +?>
\ No newline at end of file |