/** * Send the given string of data to the server. * * @param string $data The string of data to send. * * @return mixed True on success or a PEAR_Error object on failure. * * @access private * @since 1.0 */ function _send($data) { if ($this->_socket->eof()) { return new PEAR_Error('Failed to write to socket: (connection lost!) '); } if (PEAR::isError($error = $this->_socket->write($data))) { return new PEAR_Error('Failed to write to socket: ' . $error->getMessage()); } if ($this->_debug) { // C: means this data was sent by the client (this class) echo "C: " . date("H:i:s") . " " . htmlspecialchars($data) . "\n"; $this->dbgDialog .= "C: {$data}"; } return true; }
/** * Send the given string of data to the server. * * @param string $data The string of data to send. * * @return mixed True on success or a PEAR_Error object on failure. * * @access private * @since 1.0 */ function _send($data) { if ($this->_socket->eof()) { return new PEAR_Error('Failed to write to socket: (connection lost!)'); } if (PEAR::isError($error = $this->_socket->write($data))) { return new PEAR_Error('Failed to write to socket: ' . $error->getMessage()); } if ($this->_debug) { // C: means this data was sent by the client (this class) echo 'C: ' . $data; $this->dbgDialog .= 'C: ' . $data; } return true; }
/** * remove host from hosts file. * * @param string The $host to be removed to the hosts file * * @throws RuntimeException if host does not exists or cant write to file * * @return bool **/ public function remove($host) { $this->validHost($host); if (!$this->check($host)) { throw new \RuntimeException('Host does not exists in the file'); } $this->backup(); $tmpFilePath = $this->filepath . '.tmp'; $tmpFile = new \SplFileObject($tmpFilePath, 'w+'); $this->file->rewind(); while (!$this->file->eof()) { $pattern = '/\\b' . $host . '\\b/i'; if (!preg_match($pattern, $this->file->current())) { $tmpFile->fwrite($this->file->current()); } $this->file->next(); } copy($tmpFilePath, $this->filepath); unlink($tmpFilePath); return true; }
/** * Get data until a line with only a '.' in it is read and return data. * * @return mixed (array) text response on success or (object) pear_error on failure * @access private */ function _getTextResponse() { $data = array(); $line = ''; // Continue until connection is lost while (!$this->_socket->eof()) { // Retrieve and append up to 1024 characters from the server. $line .= $this->_socket->gets(1024); if (PEAR::isError($line)) { return PEAR::throwError('Failed to read from socket!', null, $line->getMessage()); } // Continue if the line is not terminated by CRLF if (substr($line, -2) != "\r\n" || strlen($line) < 2) { continue; } // Validate recieved line if (false) { // Lines should/may not be longer than 998+2 chars (RFC2822 2.3) if (strlen($line) > 1000) { return PEAR::throwError('Invalid line recieved!', null); } } // Remove CRLF from the end of the line $line = substr($line, 0, -2); // Check if the line terminates the textresponse if ($line == '.') { // return all previous lines return $data; break; } // If 1st char is '.' it's doubled (NNTP/RFC977 2.4.1) if (substr($line, 0, 2) == '..') { $line = substr($line, 1); } // Add the line to the array of lines $data[] = $line; // Reset/empty $line $line = ''; } return PEAR::throwError('Data stream not terminated with period', null); }
/** * Setup default cryptographic key for encrypt/decrypt operations * * @param string|resource|SplFileObject $cryptoKey cryptographic key or file * * @return $this */ public function setCryptoKey($cryptoKey) { if ($cryptoKey instanceof SplFileObject) { $key = []; while (!$cryptoKey->eof()) { $key[] = $cryptoKey->fgets(); } $this->cryptoKey = implode('', $key); } else { if (is_resource($cryptoKey) && get_resource_type($cryptoKey) == 'stream') { $this->cryptoKeyResource = $cryptoKey; $key = []; while (!feof($cryptoKey)) { $key[] = fgets($cryptoKey); } $this->cryptoKey = implode('', $key); } else { if ((is_string($cryptoKey) || is_numeric($cryptoKey)) && @file_exists($cryptoKey)) { $this->cryptoKey = file_get_contents($cryptoKey); } else { $this->cryptoKey = $cryptoKey; } } } if (is_array($cryptoKey)) { $this->cryptoKey = implode('', $cryptoKey); $this->key = isset($cryptoKey['key']) ? $cryptoKey['key'] : array_shift($cryptoKey); $this->iv = isset($cryptoKey['iv']) ? $cryptoKey['iv'] : array_shift($cryptoKey); } else { list($this->key, $this->iv) = $this->splitKeyIv(); } return $this; }