File indexing completed on 2024-12-22 05:37:08
0001 <?php 0002 /** 0003 * Zend Framework 0004 * 0005 * LICENSE 0006 * 0007 * This source file is subject to the new BSD license that is bundled 0008 * with this package in the file LICENSE.txt. 0009 * It is also available through the world-wide-web at this URL: 0010 * http://framework.zend.com/license/new-bsd 0011 * If you did not receive a copy of the license and are unable to 0012 * obtain it through the world-wide-web, please send an email 0013 * to license@zend.com so we can send you a copy immediately. 0014 * 0015 * @category Zend 0016 * @package Zend_TimeSync 0017 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0018 * @license http://framework.zend.com/license/new-bsd New BSD License 0019 * @version $Id$ 0020 */ 0021 0022 /** 0023 * Abstract class definition for all timeserver protocols 0024 * 0025 * @category Zend 0026 * @package Zend_TimeSync 0027 * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com) 0028 * @license http://framework.zend.com/license/new-bsd New BSD License 0029 */ 0030 abstract class Zend_TimeSync_Protocol 0031 { 0032 /** 0033 * Holds the current socket connection 0034 * 0035 * @var array 0036 */ 0037 protected $_socket; 0038 0039 /** 0040 * Exceptions that might have occured 0041 * 0042 * @var array 0043 */ 0044 protected $_exceptions; 0045 0046 /** 0047 * Hostname for timeserver 0048 * 0049 * @var string 0050 */ 0051 protected $_timeserver; 0052 0053 /** 0054 * Holds information passed/returned from timeserver 0055 * 0056 * @var array 0057 */ 0058 protected $_info = array(); 0059 0060 /** 0061 * Abstract method that prepares the data to send to the timeserver 0062 * 0063 * @return mixed 0064 */ 0065 abstract protected function _prepare(); 0066 0067 /** 0068 * Abstract method that reads the data returned from the timeserver 0069 * 0070 * @return mixed 0071 */ 0072 abstract protected function _read(); 0073 0074 /** 0075 * Abstract method that writes data to to the timeserver 0076 * 0077 * @param string $data Data to write 0078 * @return void 0079 */ 0080 abstract protected function _write($data); 0081 0082 /** 0083 * Abstract method that extracts the binary data returned from the timeserver 0084 * 0085 * @param string|array $data Data returned from the timeserver 0086 * @return integer 0087 */ 0088 abstract protected function _extract($data); 0089 0090 /** 0091 * Connect to the specified timeserver. 0092 * 0093 * @return void 0094 * @throws Zend_TimeSync_Exception When the connection failed 0095 */ 0096 protected function _connect() 0097 { 0098 $socket = @fsockopen($this->_timeserver, $this->_port, $errno, $errstr, 0099 Zend_TimeSync::$options['timeout']); 0100 if ($socket === false) { 0101 throw new Zend_TimeSync_Exception('could not connect to ' . 0102 "'$this->_timeserver' on port '$this->_port', reason: '$errstr'"); 0103 } 0104 0105 $this->_socket = $socket; 0106 } 0107 0108 /** 0109 * Disconnects from the peer, closes the socket. 0110 * 0111 * @return void 0112 */ 0113 protected function _disconnect() 0114 { 0115 @fclose($this->_socket); 0116 $this->_socket = null; 0117 } 0118 0119 /** 0120 * Return information sent/returned from the timeserver 0121 * 0122 * @return array 0123 */ 0124 public function getInfo() 0125 { 0126 if (empty($this->_info) === true) { 0127 $this->_write($this->_prepare()); 0128 $timestamp = $this->_extract($this->_read()); 0129 } 0130 0131 return $this->_info; 0132 } 0133 0134 /** 0135 * Query this timeserver without using the fallback mechanism 0136 * 0137 * @param string|Zend_Locale $locale (Optional) Locale 0138 * @return Zend_Date 0139 */ 0140 public function getDate($locale = null) 0141 { 0142 $this->_write($this->_prepare()); 0143 $timestamp = $this->_extract($this->_read()); 0144 0145 $date = new Zend_Date($this, null, $locale); 0146 return $date; 0147 } 0148 }