mirror of
https://codeberg.org/icewind/SMB.git
synced 2026-06-03 17:24:07 +02:00
all the types
This commit is contained in:
parent
515b42586e
commit
84fa890ea7
28 changed files with 330 additions and 110 deletions
|
|
@ -29,13 +29,13 @@ use Icewind\SMB\IOptions;
|
|||
* Low level wrapper for libsmbclient-php with error handling
|
||||
*/
|
||||
class NativeState {
|
||||
/**
|
||||
* @var resource
|
||||
*/
|
||||
protected $state;
|
||||
/** @var resource|null */
|
||||
protected $state = null;
|
||||
|
||||
/** @var bool */
|
||||
protected $handlerSet = false;
|
||||
|
||||
/** @var bool */
|
||||
protected $connected = false;
|
||||
|
||||
// see error.h
|
||||
|
|
@ -58,7 +58,8 @@ class NativeState {
|
|||
113 => NoRouteToHostException::class
|
||||
];
|
||||
|
||||
protected function handleError(?string $path) {
|
||||
protected function handleError(?string $path): void {
|
||||
/** @var int $error */
|
||||
$error = smbclient_state_errno($this->state);
|
||||
if ($error === 0) {
|
||||
return;
|
||||
|
|
@ -66,7 +67,12 @@ class NativeState {
|
|||
throw Exception::fromMap(self::EXCEPTION_MAP, $error, $path);
|
||||
}
|
||||
|
||||
protected function testResult($result, ?string $uri) {
|
||||
/**
|
||||
* @param mixed $result
|
||||
* @param string|null $uri
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function testResult($result, ?string $uri): void {
|
||||
if ($result === false or $result === null) {
|
||||
// smb://host/share/path
|
||||
if (is_string($uri) && count(explode('/', $uri, 5)) > 4) {
|
||||
|
|
@ -88,7 +94,9 @@ class NativeState {
|
|||
if ($this->connected) {
|
||||
return true;
|
||||
}
|
||||
$this->state = smbclient_state_new();
|
||||
/** @var resource $state */
|
||||
$state = smbclient_state_new();
|
||||
$this->state = $state;
|
||||
smbclient_option_set($this->state, SMBCLIENT_OPT_AUTO_ANONYMOUS_LOGIN, false);
|
||||
smbclient_option_set($this->state, SMBCLIENT_OPT_TIMEOUT, $options->getTimeout() * 1000);
|
||||
|
||||
|
|
@ -100,6 +108,7 @@ class NativeState {
|
|||
}
|
||||
|
||||
$auth->setExtraSmbClientOptions($this->state);
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_state_init($this->state, $auth->getWorkgroup(), $auth->getUsername(), $auth->getPassword());
|
||||
|
||||
$this->testResult($result, '');
|
||||
|
|
@ -112,6 +121,7 @@ class NativeState {
|
|||
* @return resource
|
||||
*/
|
||||
public function opendir(string $uri) {
|
||||
/** @var resource $result */
|
||||
$result = @smbclient_opendir($this->state, $uri);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
|
|
@ -121,9 +131,10 @@ class NativeState {
|
|||
/**
|
||||
* @param resource $dir
|
||||
* @param string $path
|
||||
* @return array|false
|
||||
* @return array{"type": string, "comment": string, "name": string}|false
|
||||
*/
|
||||
public function readdir($dir, string $path) {
|
||||
/** @var array{"type": string, "comment": string, "name": string}|false $result */
|
||||
$result = @smbclient_readdir($this->state, $dir);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
|
|
@ -136,6 +147,7 @@ class NativeState {
|
|||
* @return bool
|
||||
*/
|
||||
public function closedir($dir, string $path): bool {
|
||||
/** @var bool $result */
|
||||
$result = smbclient_closedir($this->state, $dir);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
|
|
@ -148,6 +160,7 @@ class NativeState {
|
|||
* @return bool
|
||||
*/
|
||||
public function rename(string $old, string $new): bool {
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_rename($this->state, $old, $this->state, $new);
|
||||
|
||||
$this->testResult($result, $new);
|
||||
|
|
@ -159,6 +172,7 @@ class NativeState {
|
|||
* @return bool
|
||||
*/
|
||||
public function unlink(string $uri): bool {
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_unlink($this->state, $uri);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
|
|
@ -171,6 +185,7 @@ class NativeState {
|
|||
* @return bool
|
||||
*/
|
||||
public function mkdir(string $uri, int $mask = 0777): bool {
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_mkdir($this->state, $uri, $mask);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
|
|
@ -182,6 +197,7 @@ class NativeState {
|
|||
* @return bool
|
||||
*/
|
||||
public function rmdir(string $uri): bool {
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_rmdir($this->state, $uri);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
|
|
@ -193,13 +209,20 @@ class NativeState {
|
|||
* @return array
|
||||
*/
|
||||
public function stat(string $uri): array {
|
||||
/** @var array $result */
|
||||
$result = @smbclient_stat($this->state, $uri);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param resource $file
|
||||
* @param string $path
|
||||
* @return array
|
||||
*/
|
||||
public function fstat($file, string $path): array {
|
||||
/** @var array $result */
|
||||
$result = @smbclient_fstat($this->state, $file);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
|
|
@ -213,6 +236,7 @@ class NativeState {
|
|||
* @return resource
|
||||
*/
|
||||
public function open(string $uri, string $mode, int $mask = 0666) {
|
||||
/** @var resource $result */
|
||||
$result = @smbclient_open($this->state, $uri, $mode, $mask);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
|
|
@ -225,13 +249,21 @@ class NativeState {
|
|||
* @return resource
|
||||
*/
|
||||
public function create(string $uri, int $mask = 0666) {
|
||||
/** @var resource $result */
|
||||
$result = @smbclient_creat($this->state, $uri, $mask);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param resource $file
|
||||
* @param int $bytes
|
||||
* @param string $path
|
||||
* @return string
|
||||
*/
|
||||
public function read($file, int $bytes, string $path): string {
|
||||
/** @var string $result */
|
||||
$result = @smbclient_read($this->state, $file, $bytes);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
|
|
@ -246,6 +278,7 @@ class NativeState {
|
|||
* @return int
|
||||
*/
|
||||
public function write($file, string $data, string $path, ?int $length = null): int {
|
||||
/** @var int $result */
|
||||
$result = @smbclient_write($this->state, $file, $data, $length);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
|
|
@ -257,23 +290,37 @@ class NativeState {
|
|||
* @param int $offset
|
||||
* @param int $whence SEEK_SET | SEEK_CUR | SEEK_END
|
||||
* @param string|null $path
|
||||
* @return int new file offset as measured from the start of the file on success.
|
||||
* @return int|false new file offset as measured from the start of the file on success.
|
||||
*/
|
||||
public function lseek($file, int $offset, int $whence = SEEK_SET, string $path = null) {
|
||||
/** @var int|false $result */
|
||||
$result = @smbclient_lseek($this->state, $file, $offset, $whence);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param resource $file
|
||||
* @param int $size
|
||||
* @param string $path
|
||||
* @return bool
|
||||
*/
|
||||
public function ftruncate($file, int $size, string $path): bool {
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_ftruncate($this->state, $file, $size);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function close($file, string $path) {
|
||||
/**
|
||||
* @param resource $file
|
||||
* @param string $path
|
||||
* @return bool
|
||||
*/
|
||||
public function close($file, string $path): bool {
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_close($this->state, $file);
|
||||
|
||||
$this->testResult($result, $path);
|
||||
|
|
@ -286,6 +333,7 @@ class NativeState {
|
|||
* @return string
|
||||
*/
|
||||
public function getxattr(string $uri, string $key) {
|
||||
/** @var string $result */
|
||||
$result = @smbclient_getxattr($this->state, $uri, $key);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
|
|
@ -297,9 +345,10 @@ class NativeState {
|
|||
* @param string $key
|
||||
* @param string $value
|
||||
* @param int $flags
|
||||
* @return mixed
|
||||
* @return bool
|
||||
*/
|
||||
public function setxattr(string $uri, string $key, string $value, int $flags = 0) {
|
||||
/** @var bool $result */
|
||||
$result = @smbclient_setxattr($this->state, $uri, $key, $value, $flags);
|
||||
|
||||
$this->testResult($result, $uri);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue