From d2255a1d304aa5e537e8aa097add2a51aa0e5d89 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Tue, 26 Aug 2014 18:46:07 +0200 Subject: New SMB storage backend --- .../3rdparty/icewind/smb/src/Connection.php | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 apps/files_external/3rdparty/icewind/smb/src/Connection.php (limited to 'apps/files_external/3rdparty/icewind/smb/src/Connection.php') diff --git a/apps/files_external/3rdparty/icewind/smb/src/Connection.php b/apps/files_external/3rdparty/icewind/smb/src/Connection.php new file mode 100644 index 00000000000..6191b11ac8e --- /dev/null +++ b/apps/files_external/3rdparty/icewind/smb/src/Connection.php @@ -0,0 +1,78 @@ + + * This file is licensed under the Licensed under the MIT license: + * http://opensource.org/licenses/MIT + */ + +namespace Icewind\SMB; + +use Icewind\SMB\Exception\AuthenticationException; +use Icewind\SMB\Exception\ConnectionException; +use Icewind\SMB\Exception\InvalidHostException; + +class Connection extends RawConnection { + const DELIMITER = 'smb:'; + + /** + * send input to smbclient + * + * @param string $input + */ + public function write($input) { + parent::write($input . PHP_EOL); + } + + /** + * get all unprocessed output from smbclient until the next prompt + * + * @throws ConnectionException + * @return string + */ + public function read() { + if (!$this->isValid()) { + throw new ConnectionException(); + } + $line = $this->readLine(); //first line is prompt + $this->checkConnectionError($line); + + $output = array(); + $line = $this->readLine(); + $length = mb_strlen(self::DELIMITER); + while (mb_substr($line, 0, $length) !== self::DELIMITER) { //next prompt functions as delimiter + $output[] .= $line; + $line = $this->readLine(); + } + return $output; + } + + /** + * check if the first line holds a connection failure + * + * @param $line + * @throws AuthenticationException + * @throws InvalidHostException + */ + private function checkConnectionError($line) { + $line = rtrim($line, ')'); + if (substr($line, -23) === ErrorCodes::LogonFailure) { + throw new AuthenticationException(); + } + if (substr($line, -26) === ErrorCodes::BadHostName) { + throw new InvalidHostException(); + } + if (substr($line, -22) === ErrorCodes::Unsuccessful) { + throw new InvalidHostException(); + } + if (substr($line, -28) === ErrorCodes::ConnectionRefused) { + throw new InvalidHostException(); + } + } + + public function close($terminate = true) { + if (is_resource($this->getInputStream())) { + $this->write('close' . PHP_EOL); + } + parent::close($terminate); + } +} -- cgit v1.2.3