function doDiscover($command, $options, $params)
    {
        if (count($params) !== 1) {
            return $this->raiseError("No channel server specified");
        }

        // Look for the possible input format "<username>:<password>@<channel>"
        if (preg_match('/^(.+):(.+)@(.+)\\z/', $params[0], $matches)) {
            $username = $matches[1];
            $password = $matches[2];
            $channel  = $matches[3];
        } else {
            $channel = $params[0];
        }

        $reg = &$this->config->getRegistry();
        if ($reg->channelExists($channel)) {
            if (!$reg->isAlias($channel)) {
                return $this->raiseError("Channel \"$channel\" is already initialized", PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS);
            }

            return $this->raiseError("A channel alias named \"$channel\" " .
                'already exists, aliasing channel "' . $reg->channelName($channel)
                . '"');
        }

        $this->pushErrorHandling(PEAR_ERROR_RETURN);
        $err = $this->doAdd($command, $options, array('http://' . $channel . '/channel.xml'));
        $this->popErrorHandling();
        if (PEAR::isError($err)) {
            if ($err->getCode() === PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS) {
                return $this->raiseError("Discovery of channel \"$channel\" failed (" .
                    $err->getMessage() . ')');
            }
            // Attempt fetch via https
            $this->ui->outputData("Discovering channel $channel over http:// failed with message: " . $err->getMessage());
            $this->ui->outputData("Trying to discover channel $channel over https:// instead");
            $this->pushErrorHandling(PEAR_ERROR_RETURN);
            $err = $this->doAdd($command, $options, array('https://' . $channel . '/channel.xml'));
            $this->popErrorHandling();
            if (PEAR::isError($err)) {
                return $this->raiseError("Discovery of channel \"$channel\" failed (" .
                    $err->getMessage() . ')');
            }
        }

        // Store username/password if they were given
        // Arguably we should do a logintest on the channel here, but since
        // that's awkward on a REST-based channel (even "pear login" doesn't
        // do it for those), and XML-RPC is deprecated, it's fairly pointless.
        if (isset($username)) {
            $this->config->set('username', $username, 'user', $channel);
            $this->config->set('password', $password, 'user', $channel);
            $this->config->store();
            $this->ui->outputData("Stored login for channel \"$channel\" using username \"$username\"", $command);
        }

        $this->ui->outputData("Discovery of channel \"$channel\" succeeded", $command);
    }
function doDiscover($command, $options, $params)
    {
        if (count($params) !== 1) {
            return $this->raiseError("No channel server specified");
        }

        // Look for the possible input format "<username>:<password>@<channel>"
        if (preg_match('/^(.+):(.+)@(.+)\\z/', $params[0], $matches)) {
            $username = $matches[1];
            $password = $matches[2];
            $channel  = $matches[3];
        } else {
            $channel = $params[0];
        }

        $reg = &$this->config->getRegistry();
        if ($reg->channelExists($channel)) {
            if (!$reg->isAlias($channel)) {
                return $this->raiseError("Channel \"$channel\" is already initialized", PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS);
            }

            return $this->raiseError("A channel alias named \"$channel\" " .
                'already exists, aliasing channel "' . $reg->channelName($channel)
                . '"');
        }

        $this->pushErrorHandling(PEAR_ERROR_RETURN);
        $err = $this->doAdd($command, $options, array('http://' . $channel . '/channel.xml'));
        $this->popErrorHandling();
        if (PEAR::isError($err)) {
            if ($err->getCode() === PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS) {
                return $this->raiseError("Discovery of channel \"$channel\" failed (" .
                    $err->getMessage() . ')');
            }
            // Attempt fetch via https
            $this->ui->outputData("Discovering channel $channel over http:// failed with message: " . $err->getMessage());
            $this->ui->outputData("Trying to discover channel $channel over https:// instead");
            $this->pushErrorHandling(PEAR_ERROR_RETURN);
            $err = $this->doAdd($command, $options, array('https://' . $channel . '/channel.xml'));
            $this->popErrorHandling();
            if (PEAR::isError($err)) {
                return $this->raiseError("Discovery of channel \"$channel\" failed (" .
                    $err->getMessage() . ')');
            }
        }

        // Store username/password if they were given
        // Arguably we should do a logintest on the channel here, but since
        // that's awkward on a REST-based channel (even "pear login" doesn't
        // do it for those), and XML-RPC is deprecated, it's fairly pointless.
        if (isset($username)) {
            $this->config->set('username', $username, 'user', $channel);
            $this->config->set('password', $password, 'user', $channel);
            $this->config->store();
            $this->ui->outputData("Stored login for channel \"$channel\" using username \"$username\"", $command);
        }

        $this->ui->outputData("Discovery of channel \"$channel\" succeeded", $command);
    }
function doDiscover ( $ command , $ options , $ params ) { if ( count ( $ params ) !== 1 ) { return $ this -> raiseError ( "No channel server specified" ) ; } // Look for the possible input format "<username>:<password>@<channel>" if ( preg_match ( '/^(.+):(.+)@(.+)\\z/' , $ params [ 0 ] , $ matches ) ) { $ username = $ matches [ 1 ] ; $ password = $ matches [ 2 ] ; $ channel = $ matches [ 3 ] ; } else { $ channel = $ params [ 0 ] ; } $ reg = & $ this -> config -> getRegistry ( ) ; if ( $ reg -> channelExists ( $ channel ) ) { if ( ! $ reg -> isAlias ( $ channel ) ) { return $ this -> raiseError ( "Channel \"$channel\" is already initialized" , PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS ) ; } return $ this -> raiseError ( "A channel alias named \"$channel\" " . 'already exists, aliasing channel "' . $ reg -> channelName ( $ channel ) . '"' ) ; } $ this -> pushErrorHandling ( PEAR_ERROR_RETURN ) ; $ err = $ this -> doAdd ( $ command , $ options , array ( 'http://' . $ channel . '/channel.xml' ) ) ; $ this -> popErrorHandling ( ) ; if ( PEAR :: isError ( $ err ) ) { if ( $ err -> getCode ( ) === PEAR_COMMAND_CHANNELS_CHANNEL_EXISTS ) { return $ this -> raiseError ( "Discovery of channel \"$channel\" failed (" . $ err -> getMessage ( ) . ')' ) ; } // Attempt fetch via https $ this -> ui -> outputData ( "Discovering channel $channel over http:// failed with message: " . $ err -> getMessage ( ) ) ; $ this -> ui -> outputData ( "Trying to discover channel $channel over https:// instead" ) ; $ this -> pushErrorHandling ( PEAR_ERROR_RETURN ) ; $ err = $ this -> doAdd ( $ command , $ options , array ( 'https://' . $ channel . '/channel.xml' ) ) ; $ this -> popErrorHandling ( ) ; if ( PEAR :: isError ( $ err ) ) { return $ this -> raiseError ( "Discovery of channel \"$channel\" failed (" . $ err -> getMessage ( ) . ')' ) ; } } // Store username/password if they were given // Arguably we should do a logintest on the channel here, but since // that's awkward on a REST-based channel (even "pear login" doesn't // do it for those), and XML-RPC is deprecated, it's fairly pointless. if ( isset ( $ username ) ) { $ this -> config -> set ( 'username' , $ username , 'user' , $ channel ) ; $ this -> config -> set ( 'password' , $ password , 'user' , $ channel ) ; $ this -> config -> store ( ) ; $ this -> ui -> outputData ( "Stored login for channel \"$channel\" using username \"$username\"" , $ command ) ; } $ this -> ui -> outputData ( "Discovery of channel \"$channel\" succeeded" , $ command ) ; }
The channel-discover command

@param string $command command name
@param array  $options option_name => value
@param array  $params  list of additional parameters.
$params[0] should contain a string with either:
- <channel name> or
- <username>:<password>@<channel name>
@return null|PEAR_Error
The channel - discover command