sieve.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 1,165 行 · 第 1/3 页

PHP
1,165
字号
<?php// +-----------------------------------------------------------------------+// | Copyright (c) 2002-2003, Richard Heyes                                     |// | All rights reserved.                                                  |// |                                                                       |// | Redistribution and use in source and binary forms, with or without    |// | modification, are permitted provided that the following conditions    |// | are met:                                                              |// |                                                                       |// | o Redistributions of source code must retain the above copyright      |// |   notice, this list of conditions and the following disclaimer.       |// | o Redistributions in binary form must reproduce the above copyright   |// |   notice, this list of conditions and the following disclaimer in the |// |   documentation and/or other materials provided with the distribution.|// | o The names of the authors may not be used to endorse or promote      |// |   products derived from this software without specific prior written  |// |   permission.                                                         |// |                                                                       |// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |// |                                                                       |// +-----------------------------------------------------------------------+// | Author: Richard Heyes <richard@phpguru.org>                           |// | Co-Author: Damian Fernandez Sosa <damlists@cnba.uba.ar>               |// +-----------------------------------------------------------------------+require_once('Net/Socket.php');/*** TODO** o supportsAuthMech()*//*** Disconnected state* @const NET_SIEVE_STATE_DISCONNECTED*/define('NET_SIEVE_STATE_DISCONNECTED',  1, true);/*** Authorisation state* @const NET_SIEVE_STATE_AUTHORISATION*/define('NET_SIEVE_STATE_AUTHORISATION', 2, true);/*** Transaction state* @const NET_SIEVE_STATE_TRANSACTION*/define('NET_SIEVE_STATE_TRANSACTION',   3, true);/*** A class for talking to the timsieved server which* comes with Cyrus IMAP. the HAVESPACE* command which appears to be broken (Cyrus 2.0.16).** @author  Richard Heyes <richard@php.net>* @author  Damian Fernandez Sosa <damlists@cnba.uba.ar>* @access  public* @version 0.9.1* @package Net_Sieve*/class Net_Sieve{    /**    * The socket object    * @var object    */    var $_sock;    /**    * Info about the connect    * @var array    */    var $_data;    /**    * Current state of the connection    * @var integer    */    var $_state;    /**    * Constructor error is any    * @var object    */    var $_error;    /**    * To allow class debuging    * @var boolean    */    var $_debug = false;    /**    * The auth methods this class support    * @var array    */    var $supportedAuthMethods=array('DIGEST-MD5', 'CRAM-MD5', 'PLAIN' , 'LOGIN');    //if you have problems using DIGEST-MD5 authentication  please commente the line above and discomment the following line    //var $supportedAuthMethods=array( 'CRAM-MD5', 'PLAIN' , 'LOGIN');    //var $supportedAuthMethods=array( 'PLAIN' , 'LOGIN');    /**    * The auth methods this class support    * @var array    */    var $supportedSASLAuthMethods=array('DIGEST-MD5', 'CRAM-MD5');    /**    * Handles posible referral loops    * @var array    */    var $_maxReferralCount = 15;    /**    * Constructor    * Sets up the object, connects to the server and logs in. stores    * any generated error in $this->_error, which can be retrieved    * using the getError() method.    *    * @access public    * @param  string $user      Login username    * @param  string $pass      Login password    * @param  string $host      Hostname of server    * @param  string $port      Port of server    * @param  string $logintype Type of login to perform    * @param  string $euser     Effective User (if $user=admin, login as $euser)    */    function Net_Sieve($user = null , $pass  = null , $host = 'localhost', $port = 2000, $logintype = '', $euser = '', $debug = false)    {        $this->_state = NET_SIEVE_STATE_DISCONNECTED;        $this->_data['user'] = $user;        $this->_data['pass'] = $pass;        $this->_data['host'] = $host;        $this->_data['port'] = $port;        $this->_data['logintype'] = $logintype;        $this->_data['euser'] = $euser;        $this->_sock = &new Net_Socket();        $this->_debug  = $debug;        /*        * Include the Auth_SASL package.  If the package is not available,        * we disable the authentication methods that depend upon it.        */        if ((@include_once 'Auth/SASL.php') === false) {            if($this->_debug){                echo "AUTH_SASL NOT PRESENT!\n";            }            foreach($this->supportedSASLAuthMethods as $SASLMethod){                $pos = array_search( $SASLMethod, $this->supportedAuthMethods );                if($this->_debug){                    echo "DISABLING METHOD $SASLMethod\n";                }                unset($this->supportedAuthMethods[$pos]);            }        }        if( ($user != null) && ($pass != null) ){            $this->_error = $this->_handleConnectAndLogin();        }    }    /**    * Handles the errors the class can find    * on the server    *    * @access private    * @return PEAR_Error    */    function _raiseError($msg, $code)    {    include_once 'PEAR.php';    return PEAR::raiseError($msg, $code);    }    /**    * Handles connect and login.    * on the server    *    * @access private    * @return mixed Indexed array of scriptnames or PEAR_Error on failure    */    function _handleConnectAndLogin(){        if (PEAR::isError($res = $this->connect($this->_data['host'] , $this->_data['port'] ))) {            return $res;        }        if (PEAR::isError($res = $this->login($this->_data['user'], $this->_data['pass'], $this->_data['logintype'] , $this->_data['euser'] ) ) ) {            return $res;        }        return true;    }    /**    * Returns an indexed array of scripts currently    * on the server    *    * @access public    * @return mixed Indexed array of scriptnames or PEAR_Error on failure    */    function listScripts()    {        if (is_array($scripts = $this->_cmdListScripts())) {            $this->_active = $scripts[1];            return $scripts[0];        } else {            return $scripts;        }    }    /**    * Returns the active script    *    * @access public    * @return mixed The active scriptname or PEAR_Error on failure    */    function getActive()    {        if (!empty($this->_active)) {            return $this->_active;        } elseif (is_array($scripts = $this->_cmdListScripts())) {            $this->_active = $scripts[1];            return $scripts[1];        }    }    /**    * Sets the active script    *    * @access public    * @param  string $scriptname The name of the script to be set as active    * @return mixed              true on success, PEAR_Error on failure    */    function setActive($scriptname)    {        return $this->_cmdSetActive($scriptname);    }    /**    * Retrieves a script    *    * @access public    * @param  string $scriptname The name of the script to be retrieved    * @return mixed              The script on success, PEAR_Error on failure    */    function getScript($scriptname)    {        return $this->_cmdGetScript($scriptname);    }    /**    * Adds a script to the server    *    * @access public    * @param  string $scriptname Name of the script    * @param  string $script     The script    * @param  bool   $makeactive Whether to make this the active script    * @return mixed              true on success, PEAR_Error on failure    */    function installScript($scriptname, $script, $makeactive = false)    {        if (PEAR::isError($res = $this->_cmdPutScript($scriptname, $script))) {            return $res;        } elseif ($makeactive) {            return $this->_cmdSetActive($scriptname);        } else {            return true;        }    }    /**    * Removes a script from the server    *    * @access public    * @param  string $scriptname Name of the script    * @return mixed              True on success, PEAR_Error on failure    */    function removeScript($scriptname)    {        return $this->_cmdDeleteScript($scriptname);    }    /**    * Returns any error that may have been generated in the    * constructor    *    * @access public    * @return mixed False if no error, PEAR_Error otherwise    */    function getError()    {        return PEAR::isError($this->_error) ? $this->_error : false;    }    /**    * Handles connecting to the server and checking the    * response is valid.    *    * @access private    * @param  string $host Hostname of server    * @param  string $port Port of server    * @return mixed        True on success, PEAR_Error otherwise    */    function connect($host, $port)    {        if (NET_SIEVE_STATE_DISCONNECTED != $this->_state) {            $msg='Not currently in DISCONNECTED state';            $code=1;            return $this->_raiseError($msg,$code);        }        if (PEAR::isError($res = $this->_sock->connect($host, $port, null, 5))) {            return $res;        }        $this->_state = NET_SIEVE_STATE_AUTHORISATION;        if (PEAR::isError($res = $this->_doCmd())) {            return $res;        }        /*        if(PEAR::isError($res = $this->_cmdCapability() )) {            $msg='Failed to connect, server said: ' . $res->getMessage();            $code=2;            return $this->_raiseError($msg,$code);        }*/        // Get logon greeting/capability and parse        $this->_parseCapability($res);        return true;    }    /**    * Logs into server.    *    * @access public    * @param  string  $user          Login username    * @param  string  $pass          Login password    * @param  string  $logintype     Type of login method to use    * @param  string  $euser         Effective UID (perform on behalf of $euser)    * @param  boolean $bypassAuth    dont perform auth     * @return mixed                  True on success, PEAR_Error otherwise    */    function login($user, $pass, $logintype = null , $euser = '', $bypassAuth=false)    {        if (NET_SIEVE_STATE_AUTHORISATION != $this->_state) {            $msg='Not currently in AUTHORISATION state';            $code=1;            return $this->_raiseError($msg,$code);        }                if( $bypassAuth === false ){            if(PEAR::isError($res=$this->_cmdAuthenticate($user , $pass , $logintype, $euser ) ) ){                return $res;            }        }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?