You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by gn...@apache.org on 2018/04/16 11:48:14 UTC
[27/30] mina-sshd git commit: [SSHD-815] Extract SFTP in its own
module
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpInputStreamWithChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpInputStreamWithChannel.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpInputStreamWithChannel.java
deleted file mode 100644
index cb75fb6..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpInputStreamWithChannel.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Objects;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient.CloseableHandle;
-import org.apache.sshd.client.subsystem.sftp.SftpClient.OpenMode;
-import org.apache.sshd.common.util.io.InputStreamWithChannel;
-
-/**
- * Implements an input stream for reading from a remote file
- *
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpInputStreamWithChannel extends InputStreamWithChannel {
- private final SftpClient client;
- private final String path;
- private byte[] bb;
- private byte[] buffer;
- private int index;
- private int available;
- private CloseableHandle handle;
- private long offset;
-
- public SftpInputStreamWithChannel(SftpClient client, int bufferSize, String path, Collection<OpenMode> mode) throws IOException {
- this.client = Objects.requireNonNull(client, "No SFTP client instance");
- this.path = path;
- bb = new byte[1];
- buffer = new byte[bufferSize];
- handle = client.open(path, mode);
- }
-
- /**
- * The client instance
- *
- * @return {@link SftpClient} instance used to access the remote file
- */
- public final SftpClient getClient() {
- return client;
- }
-
- /**
- * The remotely accessed file path
- *
- * @return Remote file path
- */
- public final String getPath() {
- return path;
- }
-
- @Override
- public boolean isOpen() {
- return (handle != null) && handle.isOpen();
- }
-
- @Override
- public boolean markSupported() {
- return false;
- }
-
- @Override
- public synchronized void mark(int readlimit) {
- throw new UnsupportedOperationException("mark(" + readlimit + ") N/A");
- }
-
- @Override
- public long skip(long n) throws IOException {
- long skipLen;
- long newIndex = index + n;
- long bufLen = Math.max(0L, available);
- if (newIndex > bufLen) {
- // exceeded current buffer
- long extraLen = newIndex - bufLen;
- offset += extraLen;
- skipLen = Math.max(0, bufLen - index) + extraLen;
- // force re-fill of read buffer
- index = 0;
- available = 0;
- } else if (newIndex < 0) {
- // went back - check how far back
- long startOffset = offset - bufLen;
- long newOffset = startOffset + newIndex; // actually a subtraction since newIndex is negative
- newOffset = Math.max(0L, newOffset);
- skipLen = index - newIndex; // actually a adding it since newIndex is negative
- offset = newOffset;
- // force re-fill of read buffer
- index = 0;
- available = 0;
- } else {
- // still within current buffer
- index = (int) newIndex;
- // need to use absolute value since skip size may have been negative
- skipLen = Math.abs(n);
- }
-
- return skipLen;
- }
-
- @Override
- public synchronized void reset() throws IOException {
- offset = 0L;
- // force re-fill of read buffer
- index = 0;
- available = 0;
- }
-
- @Override
- public int read() throws IOException {
- int read = read(bb, 0, 1);
- if (read > 0) {
- return bb[0] & 0xFF;
- }
-
- return read;
- }
-
- @Override
- public int read(byte[] b, int off, int len) throws IOException {
- if (!isOpen()) {
- throw new IOException("read(" + getPath() + ") stream closed");
- }
-
- int idx = off;
- while (len > 0) {
- if (index >= available) {
- available = client.read(handle, offset, buffer, 0, buffer.length);
- if (available < 0) {
- if (idx == off) {
- return -1;
- } else {
- break;
- }
- }
- offset += available;
- index = 0;
- }
- if (index >= available) {
- break;
- }
- int nb = Math.min(len, available - index);
- System.arraycopy(buffer, index, b, idx, nb);
- index += nb;
- idx += nb;
- len -= nb;
- }
-
- return idx - off;
- }
-
- @Override
- public void close() throws IOException {
- if (isOpen()) {
- try {
- handle.close();
- } finally {
- handle = null;
- }
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpIterableDirEntry.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpIterableDirEntry.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpIterableDirEntry.java
deleted file mode 100644
index 945e0d7..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpIterableDirEntry.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-import java.util.Objects;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient.DirEntry;
-import org.apache.sshd.common.util.ValidateUtils;
-
-/**
- * Provides an {@link Iterable} implementation of the {@link DirEntry}-ies
- * for a remote directory
- *
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpIterableDirEntry implements Iterable<DirEntry> {
- private final SftpClient client;
- private final String path;
-
- /**
- * @param client The {@link SftpClient} instance to use for the iteration
- * @param path The remote directory path
- */
- public SftpIterableDirEntry(SftpClient client, String path) {
- this.client = Objects.requireNonNull(client, "No client instance");
- this.path = ValidateUtils.checkNotNullAndNotEmpty(path, "No remote path");
- }
-
- /**
- * The client instance
- *
- * @return {@link SftpClient} instance used to access the remote file
- */
- public final SftpClient getClient() {
- return client;
- }
-
- /**
- * The remotely accessed directory path
- *
- * @return Remote directory path
- */
- public final String getPath() {
- return path;
- }
-
- @Override
- public SftpDirEntryIterator iterator() {
- try {
- return new SftpDirEntryIterator(getClient(), getPath());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpOutputStreamWithChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpOutputStreamWithChannel.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpOutputStreamWithChannel.java
deleted file mode 100644
index cf6d972..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpOutputStreamWithChannel.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Objects;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient.CloseableHandle;
-import org.apache.sshd.client.subsystem.sftp.SftpClient.OpenMode;
-import org.apache.sshd.common.util.io.OutputStreamWithChannel;
-
-/**
- * Implements an output stream for a given remote file
- *
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpOutputStreamWithChannel extends OutputStreamWithChannel {
- private final SftpClient client;
- private final String path;
- private final byte[] bb = new byte[1];
- private final byte[] buffer;
- private int index;
- private CloseableHandle handle;
- private long offset;
-
- public SftpOutputStreamWithChannel(SftpClient client, int bufferSize, String path, Collection<OpenMode> mode) throws IOException {
- this.client = Objects.requireNonNull(client, "No SFTP client instance");
- this.path = path;
- buffer = new byte[bufferSize];
- handle = client.open(path, mode);
- }
-
- /**
- * The client instance
- *
- * @return {@link SftpClient} instance used to access the remote file
- */
- public final SftpClient getClient() {
- return client;
- }
-
- /**
- * The remotely accessed file path
- *
- * @return Remote file path
- */
- public final String getPath() {
- return path;
- }
-
- @Override
- public boolean isOpen() {
- return (handle != null) && handle.isOpen();
- }
-
- @Override
- public void write(int b) throws IOException {
- bb[0] = (byte) b;
- write(bb, 0, 1);
- }
-
- @Override
- public void write(byte[] b, int off, int len) throws IOException {
- if (!isOpen()) {
- throw new IOException("write(" + getPath() + ")[len=" + len + "] stream is closed");
- }
-
- do {
- int nb = Math.min(len, buffer.length - index);
- System.arraycopy(b, off, buffer, index, nb);
- index += nb;
- if (index == buffer.length) {
- flush();
- }
- off += nb;
- len -= nb;
- } while (len > 0);
- }
-
- @Override
- public void flush() throws IOException {
- if (!isOpen()) {
- throw new IOException("flush(" + getPath() + ") stream is closed");
- }
-
- client.write(handle, offset, buffer, 0, index);
- offset += index;
- index = 0;
- }
-
- @Override
- public void close() throws IOException {
- if (isOpen()) {
- try {
- try {
- if (index > 0) {
- flush();
- }
- } finally {
- handle.close();
- }
- } finally {
- handle = null;
- }
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPath.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPath.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPath.java
deleted file mode 100644
index 5567b58..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPath.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-import java.nio.file.FileSystem;
-import java.nio.file.LinkOption;
-import java.nio.file.spi.FileSystemProvider;
-import java.util.List;
-
-import org.apache.sshd.common.file.util.BasePath;
-
-public class SftpPath extends BasePath<SftpPath, SftpFileSystem> {
- public SftpPath(SftpFileSystem fileSystem, String root, List<String> names) {
- super(fileSystem, root, names);
- }
-
- @Override
- public SftpPath toRealPath(LinkOption... options) throws IOException {
- // TODO: handle links
- SftpPath absolute = toAbsolutePath();
- FileSystem fs = getFileSystem();
- FileSystemProvider provider = fs.provider();
- provider.checkAccess(absolute);
- return absolute;
- }
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPathIterator.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPathIterator.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPathIterator.java
deleted file mode 100644
index 49b4b48..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPathIterator.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.nio.file.Path;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpPathIterator implements Iterator<Path> {
- private final SftpPath p;
- private final Iterator<? extends SftpClient.DirEntry> it;
- private boolean dotIgnored;
- private boolean dotdotIgnored;
- private SftpClient.DirEntry curEntry;
-
- public SftpPathIterator(SftpPath path, Iterable<? extends SftpClient.DirEntry> iter) {
- this(path, (iter == null) ? null : iter.iterator());
- }
-
- public SftpPathIterator(SftpPath path, Iterator<? extends SftpClient.DirEntry> iter) {
- p = path;
- it = iter;
- curEntry = nextEntry();
- }
-
- @Override
- public boolean hasNext() {
- return curEntry != null;
- }
-
- @Override
- public Path next() {
- if (curEntry == null) {
- throw new NoSuchElementException("No next entry");
- }
-
- SftpClient.DirEntry entry = curEntry;
- curEntry = nextEntry();
- return p.resolve(entry.getFilename());
- }
-
- private SftpClient.DirEntry nextEntry() {
- while ((it != null) && it.hasNext()) {
- SftpClient.DirEntry entry = it.next();
- String name = entry.getFilename();
- if (".".equals(name) && (!dotIgnored)) {
- dotIgnored = true;
- } else if ("..".equals(name) && (!dotdotIgnored)) {
- dotdotIgnored = true;
- } else {
- return entry;
- }
- }
-
- return null;
- }
-
- @Override
- public void remove() {
- throw new UnsupportedOperationException("newDirectoryStream(" + p + ") Iterator#remove() N/A");
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributeView.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributeView.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributeView.java
deleted file mode 100644
index 1fb614c..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributeView.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-import java.nio.file.LinkOption;
-import java.nio.file.Path;
-import java.nio.file.attribute.FileTime;
-import java.nio.file.attribute.GroupPrincipal;
-import java.nio.file.attribute.PosixFileAttributeView;
-import java.nio.file.attribute.PosixFileAttributes;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.UserPrincipal;
-import java.util.Set;
-
-import org.apache.sshd.client.subsystem.sftp.impl.AbstractSftpFileAttributeView;
-import org.apache.sshd.common.util.GenericUtils;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpPosixFileAttributeView extends AbstractSftpFileAttributeView implements PosixFileAttributeView {
- public SftpPosixFileAttributeView(SftpFileSystemProvider provider, Path path, LinkOption... options) {
- super(provider, path, options);
- }
-
- @Override
- public String name() {
- return "posix";
- }
-
- @Override
- public PosixFileAttributes readAttributes() throws IOException {
- return new SftpPosixFileAttributes(path, readRemoteAttributes());
- }
-
- @Override
- public void setTimes(FileTime lastModifiedTime, FileTime lastAccessTime, FileTime createTime) throws IOException {
- SftpClient.Attributes attrs = new SftpClient.Attributes();
- if (lastModifiedTime != null) {
- attrs.modifyTime(lastModifiedTime);
- }
- if (lastAccessTime != null) {
- attrs.accessTime(lastAccessTime);
- }
- if (createTime != null) {
- attrs.createTime(createTime);
- }
-
- if (GenericUtils.isEmpty(attrs.getFlags())) {
- if (log.isDebugEnabled()) {
- log.debug("setTimes({}) no changes", path);
- }
- } else {
- writeRemoteAttributes(attrs);
- }
- }
-
- @Override
- public void setPermissions(Set<PosixFilePermission> perms) throws IOException {
- provider.setAttribute(path, "permissions", perms, options);
- }
-
- @Override
- public void setGroup(GroupPrincipal group) throws IOException {
- provider.setAttribute(path, "group", group, options);
- }
-
- @Override
- public UserPrincipal getOwner() throws IOException {
- return readAttributes().owner();
- }
-
- @Override
- public void setOwner(UserPrincipal owner) throws IOException {
- provider.setAttribute(path, "owner", owner, options);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributes.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributes.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributes.java
deleted file mode 100644
index a07e67f..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpPosixFileAttributes.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.nio.file.Path;
-import java.nio.file.attribute.FileTime;
-import java.nio.file.attribute.GroupPrincipal;
-import java.nio.file.attribute.PosixFileAttributes;
-import java.nio.file.attribute.PosixFilePermission;
-import java.nio.file.attribute.UserPrincipal;
-import java.util.Set;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient.Attributes;
-import org.apache.sshd.common.util.GenericUtils;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpPosixFileAttributes implements PosixFileAttributes {
- private final Path path;
- private final Attributes attributes;
-
- public SftpPosixFileAttributes(Path path, Attributes attributes) {
- this.path = path;
- this.attributes = attributes;
- }
-
- /**
- * @return The referenced attributes file {@link Path}
- */
- public final Path getPath() {
- return path;
- }
-
- @Override
- public UserPrincipal owner() {
- String owner = attributes.getOwner();
- return GenericUtils.isEmpty(owner) ? null : new SftpFileSystem.DefaultUserPrincipal(owner);
- }
-
- @Override
- public GroupPrincipal group() {
- String group = attributes.getGroup();
- return GenericUtils.isEmpty(group) ? null : new SftpFileSystem.DefaultGroupPrincipal(group);
- }
-
- @Override
- public Set<PosixFilePermission> permissions() {
- return SftpFileSystemProvider.permissionsToAttributes(attributes.getPermissions());
- }
-
- @Override
- public FileTime lastModifiedTime() {
- return attributes.getModifyTime();
- }
-
- @Override
- public FileTime lastAccessTime() {
- return attributes.getAccessTime();
- }
-
- @Override
- public FileTime creationTime() {
- return attributes.getCreateTime();
- }
-
- @Override
- public boolean isRegularFile() {
- return attributes.isRegularFile();
- }
-
- @Override
- public boolean isDirectory() {
- return attributes.isDirectory();
- }
-
- @Override
- public boolean isSymbolicLink() {
- return attributes.isSymbolicLink();
- }
-
- @Override
- public boolean isOther() {
- return attributes.isOther();
- }
-
- @Override
- public long size() {
- return attributes.getSize();
- }
-
- @Override
- public Object fileKey() {
- // TODO consider implementing this
- return null;
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpRemotePathChannel.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpRemotePathChannel.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpRemotePathChannel.java
deleted file mode 100644
index 9195009..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpRemotePathChannel.java
+++ /dev/null
@@ -1,412 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.AsynchronousCloseException;
-import java.nio.channels.ClosedChannelException;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileLock;
-import java.nio.channels.OverlappingFileLockException;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.WritableByteChannel;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.AtomicReference;
-
-import org.apache.sshd.common.subsystem.sftp.SftpConstants;
-import org.apache.sshd.common.subsystem.sftp.SftpException;
-import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.ValidateUtils;
-import org.apache.sshd.common.util.io.IoUtils;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public class SftpRemotePathChannel extends FileChannel {
- public static final String COPY_BUFSIZE_PROP = "sftp-channel-copy-buf-size";
- public static final int DEFAULT_TRANSFER_BUFFER_SIZE = IoUtils.DEFAULT_COPY_SIZE;
-
- public static final Set<SftpClient.OpenMode> READ_MODES =
- Collections.unmodifiableSet(EnumSet.of(SftpClient.OpenMode.Read));
-
- public static final Set<SftpClient.OpenMode> WRITE_MODES =
- Collections.unmodifiableSet(
- EnumSet.of(SftpClient.OpenMode.Write, SftpClient.OpenMode.Append, SftpClient.OpenMode.Create, SftpClient.OpenMode.Truncate));
-
- private final String path;
- private final Collection<SftpClient.OpenMode> modes;
- private final boolean closeOnExit;
- private final SftpClient sftp;
- private final SftpClient.CloseableHandle handle;
- private final Object lock = new Object();
- private final AtomicLong posTracker = new AtomicLong(0L);
- private final AtomicReference<Thread> blockingThreadHolder = new AtomicReference<>(null);
-
- public SftpRemotePathChannel(String path, SftpClient sftp, boolean closeOnExit, Collection<SftpClient.OpenMode> modes) throws IOException {
- this.path = ValidateUtils.checkNotNullAndNotEmpty(path, "No remote file path specified");
- this.modes = Objects.requireNonNull(modes, "No channel modes specified");
- this.sftp = Objects.requireNonNull(sftp, "No SFTP client instance");
- this.closeOnExit = closeOnExit;
- this.handle = sftp.open(path, modes);
- }
-
- public String getRemotePath() {
- return path;
- }
-
- @Override
- public int read(ByteBuffer dst) throws IOException {
- return (int) doRead(Collections.singletonList(dst), -1);
- }
-
- @Override
- public int read(ByteBuffer dst, long position) throws IOException {
- if (position < 0) {
- throw new IllegalArgumentException("read(" + getRemotePath() + ") illegal position to read from: " + position);
- }
- return (int) doRead(Collections.singletonList(dst), position);
- }
-
- @Override
- public long read(ByteBuffer[] dsts, int offset, int length) throws IOException {
- List<ByteBuffer> buffers = Arrays.asList(dsts).subList(offset, offset + length);
- return doRead(buffers, -1);
- }
-
- protected long doRead(List<ByteBuffer> buffers, long position) throws IOException {
- ensureOpen(READ_MODES);
- synchronized (lock) {
- boolean completed = false;
- boolean eof = false;
- long curPos = (position >= 0L) ? position : posTracker.get();
- try {
- long totalRead = 0;
- beginBlocking();
- loop:
- for (ByteBuffer buffer : buffers) {
- while (buffer.remaining() > 0) {
- ByteBuffer wrap = buffer;
- if (!buffer.hasArray()) {
- wrap = ByteBuffer.allocate(Math.min(IoUtils.DEFAULT_COPY_SIZE, buffer.remaining()));
- }
- int read = sftp.read(handle, curPos, wrap.array(), wrap.arrayOffset() + wrap.position(), wrap.remaining());
- if (read > 0) {
- if (wrap == buffer) {
- wrap.position(wrap.position() + read);
- } else {
- buffer.put(wrap.array(), wrap.arrayOffset(), read);
- }
- curPos += read;
- totalRead += read;
- } else {
- eof = read == -1;
- break loop;
- }
- }
- }
- completed = true;
- if (totalRead > 0) {
- return totalRead;
- }
-
- if (eof) {
- return -1;
- } else {
- return 0;
- }
- } finally {
- if (position < 0L) {
- posTracker.set(curPos);
- }
- endBlocking(completed);
- }
- }
- }
-
- @Override
- public int write(ByteBuffer src) throws IOException {
- return (int) doWrite(Collections.singletonList(src), -1);
- }
-
- @Override
- public int write(ByteBuffer src, long position) throws IOException {
- if (position < 0L) {
- throw new IllegalArgumentException("write(" + getRemotePath() + ") illegal position to write to: " + position);
- }
- return (int) doWrite(Collections.singletonList(src), position);
- }
-
- @Override
- public long write(ByteBuffer[] srcs, int offset, int length) throws IOException {
- List<ByteBuffer> buffers = Arrays.asList(srcs).subList(offset, offset + length);
- return doWrite(buffers, -1);
- }
-
- protected long doWrite(List<ByteBuffer> buffers, long position) throws IOException {
- ensureOpen(WRITE_MODES);
- synchronized (lock) {
- boolean completed = false;
- long curPos = (position >= 0L) ? position : posTracker.get();
- try {
- long totalWritten = 0L;
- beginBlocking();
- for (ByteBuffer buffer : buffers) {
- while (buffer.remaining() > 0) {
- ByteBuffer wrap = buffer;
- if (!buffer.hasArray()) {
- wrap = ByteBuffer.allocate(Math.min(IoUtils.DEFAULT_COPY_SIZE, buffer.remaining()));
- buffer.get(wrap.array(), wrap.arrayOffset(), wrap.remaining());
- }
- int written = wrap.remaining();
- sftp.write(handle, curPos, wrap.array(), wrap.arrayOffset() + wrap.position(), written);
- if (wrap == buffer) {
- wrap.position(wrap.position() + written);
- }
- curPos += written;
- totalWritten += written;
- }
- }
- completed = true;
- return totalWritten;
- } finally {
- if (position < 0L) {
- posTracker.set(curPos);
- }
- endBlocking(completed);
- }
- }
- }
-
- @Override
- public long position() throws IOException {
- ensureOpen(Collections.emptySet());
- return posTracker.get();
- }
-
- @Override
- public FileChannel position(long newPosition) throws IOException {
- if (newPosition < 0L) {
- throw new IllegalArgumentException("position(" + getRemotePath() + ") illegal file channel position: " + newPosition);
- }
-
- ensureOpen(Collections.emptySet());
- posTracker.set(newPosition);
- return this;
- }
-
- @Override
- public long size() throws IOException {
- ensureOpen(Collections.emptySet());
- return sftp.stat(handle).getSize();
- }
-
- @Override
- public FileChannel truncate(long size) throws IOException {
- ensureOpen(Collections.emptySet());
- sftp.setStat(handle, new SftpClient.Attributes().size(size));
- return this;
- }
-
- @Override
- public void force(boolean metaData) throws IOException {
- ensureOpen(Collections.emptySet());
- }
-
- @Override
- public long transferTo(long position, long count, WritableByteChannel target) throws IOException {
- if ((position < 0) || (count < 0)) {
- throw new IllegalArgumentException("transferTo(" + getRemotePath() + ") illegal position (" + position + ") or count (" + count + ")");
- }
- ensureOpen(READ_MODES);
- synchronized (lock) {
- boolean completed = false;
- boolean eof = false;
- long curPos = position;
- try {
- beginBlocking();
-
- int bufSize = (int) Math.min(count, Short.MAX_VALUE + 1);
- byte[] buffer = new byte[bufSize];
- long totalRead = 0L;
- while (totalRead < count) {
- int read = sftp.read(handle, curPos, buffer, 0, buffer.length);
- if (read > 0) {
- ByteBuffer wrap = ByteBuffer.wrap(buffer);
- while (wrap.remaining() > 0) {
- target.write(wrap);
- }
- curPos += read;
- totalRead += read;
- } else {
- eof = read == -1;
- }
- }
- completed = true;
- return totalRead > 0 ? totalRead : eof ? -1 : 0;
- } finally {
- endBlocking(completed);
- }
- }
- }
-
- @Override
- public long transferFrom(ReadableByteChannel src, long position, long count) throws IOException {
- if ((position < 0) || (count < 0)) {
- throw new IllegalArgumentException("transferFrom(" + getRemotePath() + ") illegal position (" + position + ") or count (" + count + ")");
- }
- ensureOpen(WRITE_MODES);
-
- int copySize = sftp.getClientSession().getIntProperty(COPY_BUFSIZE_PROP, DEFAULT_TRANSFER_BUFFER_SIZE);
- boolean completed = false;
- long curPos = (position >= 0L) ? position : posTracker.get();
- long totalRead = 0L;
- byte[] buffer = new byte[(int) Math.min(copySize, count)];
-
- synchronized (lock) {
- try {
- beginBlocking();
-
- while (totalRead < count) {
- ByteBuffer wrap = ByteBuffer.wrap(buffer, 0, (int) Math.min(buffer.length, count - totalRead));
- int read = src.read(wrap);
- if (read > 0) {
- sftp.write(handle, curPos, buffer, 0, read);
- curPos += read;
- totalRead += read;
- } else {
- break;
- }
- }
- completed = true;
- return totalRead;
- } finally {
- endBlocking(completed);
- }
- }
- }
-
- @Override
- public MappedByteBuffer map(MapMode mode, long position, long size) throws IOException {
- throw new UnsupportedOperationException("map(" + getRemotePath() + ")[" + mode + "," + position + "," + size + "] N/A");
- }
-
- @Override
- public FileLock lock(long position, long size, boolean shared) throws IOException {
- return tryLock(position, size, shared);
- }
-
- @Override
- public FileLock tryLock(final long position, final long size, boolean shared) throws IOException {
- ensureOpen(Collections.emptySet());
-
- try {
- sftp.lock(handle, position, size, 0);
- } catch (SftpException e) {
- if (e.getStatus() == SftpConstants.SSH_FX_LOCK_CONFLICT) {
- throw new OverlappingFileLockException();
- }
- throw e;
- }
-
- return new FileLock(this, position, size, shared) {
- private final AtomicBoolean valid = new AtomicBoolean(true);
-
- @Override
- public boolean isValid() {
- return acquiredBy().isOpen() && valid.get();
- }
-
- @SuppressWarnings("synthetic-access")
- @Override
- public void release() throws IOException {
- if (valid.compareAndSet(true, false)) {
- sftp.unlock(handle, position, size);
- }
- }
- };
- }
-
- @Override
- protected void implCloseChannel() throws IOException {
- try {
- final Thread thread = blockingThreadHolder.get();
- if (thread != null) {
- thread.interrupt();
- }
- } finally {
- try {
- handle.close();
- } finally {
- if (closeOnExit) {
- sftp.close();
- }
- }
- }
- }
-
- private void beginBlocking() {
- begin();
- blockingThreadHolder.set(Thread.currentThread());
- }
-
- private void endBlocking(boolean completed) throws AsynchronousCloseException {
- blockingThreadHolder.set(null);
- end(completed);
- }
-
- /**
- * Checks that the channel is open and that its current mode contains
- * at least one of the required ones
- *
- * @param reqModes The required modes - ignored if {@code null}/empty
- * @throws IOException If channel not open or the required modes are not
- * satisfied
- */
- private void ensureOpen(Collection<SftpClient.OpenMode> reqModes) throws IOException {
- if (!isOpen()) {
- throw new ClosedChannelException();
- }
-
- if (GenericUtils.size(reqModes) > 0) {
- for (SftpClient.OpenMode m : reqModes) {
- if (this.modes.contains(m)) {
- return;
- }
- }
-
- throw new IOException("ensureOpen(" + getRemotePath() + ") current channel modes (" + this.modes + ") do contain any of the required: " + reqModes);
- }
- }
-
- @Override
- public String toString() {
- return getRemotePath();
- }
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpVersionSelector.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpVersionSelector.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpVersionSelector.java
deleted file mode 100644
index 3f0de71..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/SftpVersionSelector.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.StreamSupport;
-
-import org.apache.sshd.client.session.ClientSession;
-import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.NumberUtils;
-import org.apache.sshd.common.util.ValidateUtils;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-@FunctionalInterface
-public interface SftpVersionSelector {
- /**
- * An {@link SftpVersionSelector} that returns the current version
- */
- SftpVersionSelector CURRENT = new NamedVersionSelector("CURRENT", (session, current, available) -> current);
-
- /**
- * An {@link SftpVersionSelector} that returns the maximum available version
- */
- SftpVersionSelector MAXIMUM = new NamedVersionSelector("MAXIMUM", (session, current, available) ->
- GenericUtils.stream(available).mapToInt(Integer::intValue).max().orElse(current));
-
- /**
- * An {@link SftpVersionSelector} that returns the maximum available version
- */
- SftpVersionSelector MINIMUM = new NamedVersionSelector("MINIMUM", (session, current, available) ->
- GenericUtils.stream(available).mapToInt(Integer::intValue).min().orElse(current));
-
- /**
- * @param session The {@link ClientSession} through which the SFTP connection is made
- * @param current The current version negotiated with the server
- * @param available Extra versions available - may be empty and/or contain only the current one
- * @return The new requested version - if same as current, then nothing is done
- */
- int selectVersion(ClientSession session, int current, List<Integer> available);
-
- /**
- * Creates a selector the always returns the requested (fixed version) regardless
- * of what the current or reported available versions are. If the requested version
- * is not reported as available then an exception will be eventually thrown by the
- * client during re-negotiation phase.
- *
- * @param version The requested version
- * @return The {@link SftpVersionSelector}
- */
- static SftpVersionSelector fixedVersionSelector(int version) {
- return new NamedVersionSelector(Integer.toString(version), (session, current, available) -> version);
- }
-
- /**
- * Selects a version in order of preference - if none of the preferred
- * versions is listed as available then an exception is thrown when the
- * {@link SftpVersionSelector#selectVersion(ClientSession, int, List)} method is invoked
- *
- * @param preferred The preferred versions in decreasing order of
- * preference (i.e., most preferred is 1st) - may not be {@code null}/empty
- * @return A {@link SftpVersionSelector} that attempts to select
- * the most preferred version that is also listed as available.
- */
- static SftpVersionSelector preferredVersionSelector(int... preferred) {
- return preferredVersionSelector(NumberUtils.asList(preferred));
-
- }
-
- /**
- * Selects a version in order of preference - if none of the preferred
- * versions is listed as available then an exception is thrown when the
- * {@link SftpVersionSelector#selectVersion(ClientSession, int, List)} method is invoked
- *
- * @param preferred The preferred versions in decreasing order of
- * preference (i.e., most preferred is 1st)
- * @return A {@link SftpVersionSelector} that attempts to select
- * the most preferred version that is also listed as available.
- */
- static SftpVersionSelector preferredVersionSelector(Iterable<? extends Number> preferred) {
- ValidateUtils.checkNotNullAndNotEmpty((Collection<?>) preferred, "Empty preferred versions");
- return new NamedVersionSelector(GenericUtils.join(preferred, ','), (session, current, available) -> StreamSupport.stream(preferred.spliterator(), false)
- .mapToInt(Number::intValue)
- .filter(v -> v == current || available.contains(v))
- .findFirst()
- .orElseThrow(() -> new IllegalStateException("Preferred versions (" + preferred + ") not available: " + available)));
- }
-
- class NamedVersionSelector implements SftpVersionSelector {
- private final String name;
- private final SftpVersionSelector selector;
-
- public NamedVersionSelector(String name, SftpVersionSelector selector) {
- this.name = name;
- this.selector = selector;
- }
-
- @Override
- public int selectVersion(ClientSession session, int current, List<Integer> available) {
- return selector.selectVersion(session, current, available);
- }
-
- @Override
- public String toString() {
- return name;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/StfpIterableDirHandle.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/StfpIterableDirHandle.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/StfpIterableDirHandle.java
deleted file mode 100644
index c3be157..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/StfpIterableDirHandle.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.sshd.client.subsystem.sftp;
-
-import java.util.Objects;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient.DirEntry;
-import org.apache.sshd.client.subsystem.sftp.SftpClient.Handle;
-
-public class StfpIterableDirHandle implements Iterable<DirEntry> {
- private final SftpClient client;
- private final Handle handle;
-
- /**
- * @param client The {@link SftpClient} to use for iteration
- * @param handle The remote directory {@link Handle}
- */
- public StfpIterableDirHandle(SftpClient client, Handle handle) {
- this.client = Objects.requireNonNull(client, "No client instance");
- this.handle = handle;
- }
-
- /**
- * The client instance
- *
- * @return {@link SftpClient} instance used to access the remote file
- */
- public final SftpClient getClient() {
- return client;
- }
-
- /**
- * @return The remote directory {@link Handle}
- */
- public final Handle getHandle() {
- return handle;
- }
-
- @Override
- public SftpDirEntryIterator iterator() {
- return new SftpDirEntryIterator(getClient(), getHandle());
- }
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java
deleted file mode 100644
index 9e83837..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/BuiltinSftpClientExtensions.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.sshd.client.subsystem.sftp.RawSftpClient;
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
-import org.apache.sshd.client.subsystem.sftp.extensions.helpers.CheckFileHandleExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.helpers.CheckFileNameExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.helpers.CopyDataExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.helpers.CopyFileExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.helpers.MD5FileExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.helpers.MD5HandleExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.helpers.SpaceAvailableExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.openssh.OpenSSHFsyncExtension;
-import org.apache.sshd.client.subsystem.sftp.extensions.openssh.OpenSSHStatHandleExtension;
-import org.apache.sshd.client.subsystem.sftp.extensions.openssh.OpenSSHStatPathExtension;
-import org.apache.sshd.client.subsystem.sftp.extensions.openssh.helpers.OpenSSHFsyncExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.openssh.helpers.OpenSSHStatHandleExtensionImpl;
-import org.apache.sshd.client.subsystem.sftp.extensions.openssh.helpers.OpenSSHStatPathExtensionImpl;
-import org.apache.sshd.common.NamedResource;
-import org.apache.sshd.common.subsystem.sftp.SftpConstants;
-import org.apache.sshd.common.subsystem.sftp.extensions.ParserUtils;
-import org.apache.sshd.common.subsystem.sftp.extensions.openssh.FstatVfsExtensionParser;
-import org.apache.sshd.common.subsystem.sftp.extensions.openssh.FsyncExtensionParser;
-import org.apache.sshd.common.subsystem.sftp.extensions.openssh.StatVfsExtensionParser;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public enum BuiltinSftpClientExtensions implements SftpClientExtensionFactory {
- COPY_FILE(SftpConstants.EXT_COPY_FILE, CopyFileExtension.class) {
- @Override // co-variant return
- public CopyFileExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new CopyFileExtensionImpl(client, raw, ParserUtils.supportedExtensions(parsed));
- }
- },
- COPY_DATA(SftpConstants.EXT_COPY_DATA, CopyDataExtension.class) {
- @Override // co-variant return
- public CopyDataExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new CopyDataExtensionImpl(client, raw, ParserUtils.supportedExtensions(parsed));
- }
- },
- MD5_FILE(SftpConstants.EXT_MD5_HASH, MD5FileExtension.class) {
- @Override // co-variant return
- public MD5FileExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new MD5FileExtensionImpl(client, raw, ParserUtils.supportedExtensions(parsed));
- }
- },
- MD5_HANDLE(SftpConstants.EXT_MD5_HASH_HANDLE, MD5HandleExtension.class) {
- @Override // co-variant return
- public MD5HandleExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new MD5HandleExtensionImpl(client, raw, ParserUtils.supportedExtensions(parsed));
- }
- },
- CHECK_FILE_NAME(SftpConstants.EXT_CHECK_FILE_NAME, CheckFileNameExtension.class) {
- @Override // co-variant return
- public CheckFileNameExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new CheckFileNameExtensionImpl(client, raw, ParserUtils.supportedExtensions(parsed));
- }
- },
- CHECK_FILE_HANDLE(SftpConstants.EXT_CHECK_FILE_HANDLE, CheckFileHandleExtension.class) {
- @Override // co-variant return
- public CheckFileHandleExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new CheckFileHandleExtensionImpl(client, raw, ParserUtils.supportedExtensions(parsed));
- }
- },
- SPACE_AVAILABLE(SftpConstants.EXT_SPACE_AVAILABLE, SpaceAvailableExtension.class) {
- @Override // co-variant return
- public SpaceAvailableExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new SpaceAvailableExtensionImpl(client, raw, ParserUtils.supportedExtensions(parsed));
- }
- },
- OPENSSH_FSYNC(FsyncExtensionParser.NAME, OpenSSHFsyncExtension.class) {
- @Override // co-variant return
- public OpenSSHFsyncExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new OpenSSHFsyncExtensionImpl(client, raw, extensions);
- }
- },
- OPENSSH_STAT_HANDLE(FstatVfsExtensionParser.NAME, OpenSSHStatHandleExtension.class) {
- @Override // co-variant return
- public OpenSSHStatHandleExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new OpenSSHStatHandleExtensionImpl(client, raw, extensions);
- }
- },
- OPENSSH_STAT_PATH(StatVfsExtensionParser.NAME, OpenSSHStatPathExtension.class) {
- @Override // co-variant return
- public OpenSSHStatPathExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed) {
- return new OpenSSHStatPathExtensionImpl(client, raw, extensions);
- }
- };
-
- public static final Set<BuiltinSftpClientExtensions> VALUES =
- Collections.unmodifiableSet(EnumSet.allOf(BuiltinSftpClientExtensions.class));
-
- private final String name;
-
- private final Class<? extends SftpClientExtension> type;
-
- BuiltinSftpClientExtensions(String name, Class<? extends SftpClientExtension> type) {
- this.name = name;
- this.type = type;
- }
-
- @Override
- public final String getName() {
- return name;
- }
-
- public final Class<? extends SftpClientExtension> getType() {
- return type;
- }
-
- public static BuiltinSftpClientExtensions fromName(String n) {
- return NamedResource.findByName(n, String.CASE_INSENSITIVE_ORDER, VALUES);
- }
-
- public static BuiltinSftpClientExtensions fromInstance(Object o) {
- return fromType((o == null) ? null : o.getClass());
- }
-
- public static BuiltinSftpClientExtensions fromType(Class<?> type) {
- if ((type == null) || (!SftpClientExtension.class.isAssignableFrom(type))) {
- return null;
- }
-
- // the base class is assignable to everybody so we cannot distinguish between the enum(s)
- if (SftpClientExtension.class == type) {
- return null;
- }
-
- for (BuiltinSftpClientExtensions v : VALUES) {
- Class<?> vt = v.getType();
- if (vt.isAssignableFrom(type)) {
- return v;
- }
- }
-
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileHandleExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileHandleExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileHandleExtension.java
deleted file mode 100644
index 3261a63..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileHandleExtension.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient.Handle;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 - section 9.1.2</A>
- */
-public interface CheckFileHandleExtension extends SftpClientExtension {
- /**
- * @param handle Remote file {@link Handle} - must be a file and opened for read
- * @param algorithms Hash algorithms in preferred order
- * @param startOffset Start offset of the hash
- * @param length Length of data to hash - if zero then till EOF
- * @param blockSize Input block size to calculate individual hashes - if
- * zero the <U>one</U> hash of <U>all</U> the data
- * @return An <U>immutable</U> {@link java.util.Map.Entry} where key=hash algorithm name,
- * value=the calculated hashes.
- * @throws IOException If failed to execute the command
- */
- Map.Entry<String, Collection<byte[]>> checkFileHandle(Handle handle, Collection<String> algorithms, long startOffset, long length, int blockSize) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileNameExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileNameExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileNameExtension.java
deleted file mode 100644
index 14e0204..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CheckFileNameExtension.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 - section 9.1.2</A>
- */
-public interface CheckFileNameExtension extends SftpClientExtension {
- /**
- * @param name Remote file name/path
- * @param algorithms Hash algorithms in preferred order
- * @param startOffset Start offset of the hash
- * @param length Length of data to hash - if zero then till EOF
- * @param blockSize Input block size to calculate individual hashes - if
- * zero the <U>one</U> hash of <U>all</U> the data
- * @return An <U>immutable</U> {@link java.util.Map.Entry} key left=hash algorithm name,
- * value=the calculated hashes.
- * @throws IOException If failed to execute the command
- */
- Map.Entry<String, Collection<byte[]>> checkFileName(String name, Collection<String> algorithms, long startOffset, long length, int blockSize) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyDataExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyDataExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyDataExtension.java
deleted file mode 100644
index 0250b86..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyDataExtension.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.io.IOException;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient.Handle;
-
-/**
- * Implements the "copy-data" extension
- *
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- * @see <A HREF="http://tools.ietf.org/id/draft-ietf-secsh-filexfer-extensions-00.txt">DRAFT 00 section 7</A>
- */
-public interface CopyDataExtension extends SftpClientExtension {
- void copyData(Handle readHandle, long readOffset, long readLength, Handle writeHandle, long writeOffset) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyFileExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyFileExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyFileExtension.java
deleted file mode 100644
index 749c1a6..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/CopyFileExtension.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.io.IOException;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- * @see <A HREF="https://tools.ietf.org/html/draft-ietf-secsh-filexfer-extensions-00#section-6">copy-file extension</A>
- */
-public interface CopyFileExtension extends SftpClientExtension {
- /**
- * @param src The (<U>remote</U>) file source path
- * @param dst The (<U>remote</U>) file destination path
- * @param overwriteDestination If {@code true} then OK to override destination if exists
- * @throws IOException If failed to execute the command or extension not supported
- */
- void copyFile(String src, String dst, boolean overwriteDestination) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5FileExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5FileExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5FileExtension.java
deleted file mode 100644
index 2e8d23f..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5FileExtension.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.io.IOException;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 - section 9.1.1</A>
- */
-public interface MD5FileExtension extends SftpClientExtension {
- /**
- * @param path The (remote) path
- * @param offset The offset to start calculating the hash
- * @param length The number of data bytes to calculate the hash on - if
- * greater than available, then up to whatever is available
- * @param quickHash A quick-hash of the 1st 2048 bytes - ignored if {@code null}/empty
- * @return The hash value if the quick hash matches (or {@code null}/empty), or
- * {@code null}/empty if the quick hash is provided and it does not match
- * @throws IOException If failed to calculate the hash
- */
- byte[] getHash(String path, long offset, long length, byte[] quickHash) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5HandleExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5HandleExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5HandleExtension.java
deleted file mode 100644
index 18392fa..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/MD5HandleExtension.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.io.IOException;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 - section 9.1.1</A>
- */
-public interface MD5HandleExtension extends SftpClientExtension {
- /**
- * @param handle The (remote) file {@code Handle}
- * @param offset The offset to start calculating the hash
- * @param length The number of data bytes to calculate the hash on - if
- * greater than available, then up to whatever is available
- * @param quickHash A quick-hash of the 1st 2048 bytes - ignored if {@code null}/empty
- * @return The hash value if the quick hash matches (or {@code null}/empty), or
- * {@code null}/empty if the quick hash is provided and it does not match
- * @throws IOException If failed to calculate the hash
- */
- byte[] getHash(SftpClient.Handle handle, long offset, long length, byte[] quickHash) throws IOException;
-
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtension.java
deleted file mode 100644
index c27a9e1..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtension.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
-import org.apache.sshd.common.NamedResource;
-import org.apache.sshd.common.OptionalFeature;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public interface SftpClientExtension extends NamedResource, OptionalFeature {
- /**
- * @return The {@link SftpClient} used to issue the extended command
- */
- SftpClient getClient();
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java
deleted file mode 100644
index 0692a04..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SftpClientExtensionFactory.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.util.Map;
-
-import org.apache.sshd.client.subsystem.sftp.RawSftpClient;
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
-import org.apache.sshd.common.NamedResource;
-import org.apache.sshd.common.subsystem.sftp.extensions.ParserUtils;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public interface SftpClientExtensionFactory extends NamedResource {
- default SftpClientExtension create(SftpClient client, RawSftpClient raw) {
- Map<String, byte[]> extensions = client.getServerExtensions();
- return create(client, raw, extensions, ParserUtils.parse(extensions));
- }
-
- SftpClientExtension create(SftpClient client, RawSftpClient raw, Map<String, byte[]> extensions, Map<String, ?> parsed);
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SpaceAvailableExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SpaceAvailableExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SpaceAvailableExtension.java
deleted file mode 100644
index 2cc938b..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/SpaceAvailableExtension.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions;
-
-import java.io.IOException;
-
-import org.apache.sshd.common.subsystem.sftp.extensions.SpaceAvailableExtensionInfo;
-
-/**
- * Implements the "space-available" extension
- *
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- * @see <A HREF="http://tools.ietf.org/wg/secsh/draft-ietf-secsh-filexfer/draft-ietf-secsh-filexfer-09.txt">DRAFT 09 section 9.2</A>
- */
-public interface SpaceAvailableExtension extends SftpClientExtension {
- SpaceAvailableExtensionInfo available(String path) throws IOException;
-}
http://git-wip-us.apache.org/repos/asf/mina-sshd/blob/251db9b9/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractCheckFileExtension.java
----------------------------------------------------------------------
diff --git a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractCheckFileExtension.java b/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractCheckFileExtension.java
deleted file mode 100644
index 1411098..0000000
--- a/sshd-core/src/main/java/org/apache/sshd/client/subsystem/sftp/extensions/helpers/AbstractCheckFileExtension.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.sshd.client.subsystem.sftp.extensions.helpers;
-
-import java.io.IOException;
-import java.io.StreamCorruptedException;
-import java.util.AbstractMap.SimpleImmutableEntry;
-import java.util.Collection;
-import java.util.LinkedList;
-
-import org.apache.sshd.client.subsystem.sftp.RawSftpClient;
-import org.apache.sshd.client.subsystem.sftp.SftpClient;
-import org.apache.sshd.common.subsystem.sftp.SftpConstants;
-import org.apache.sshd.common.util.GenericUtils;
-import org.apache.sshd.common.util.buffer.Buffer;
-import org.apache.sshd.common.util.buffer.BufferUtils;
-
-/**
- * @author <a href="mailto:dev@mina.apache.org">Apache MINA SSHD Project</a>
- */
-public abstract class AbstractCheckFileExtension extends AbstractSftpClientExtension {
- protected AbstractCheckFileExtension(String name, SftpClient client, RawSftpClient raw, Collection<String> extras) {
- super(name, client, raw, extras);
- }
-
- protected SimpleImmutableEntry<String, Collection<byte[]>> doGetHash(Object target, Collection<String> algorithms, long offset, long length, int blockSize) throws IOException {
- Buffer buffer = getCommandBuffer(target, Byte.MAX_VALUE);
- putTarget(buffer, target);
- buffer.putString(GenericUtils.join(algorithms, ','));
- buffer.putLong(offset);
- buffer.putLong(length);
- buffer.putInt(blockSize);
-
- if (log.isDebugEnabled()) {
- log.debug("doGetHash({})[{}] - offset={}, length={}, block-size={}",
- getName(), (target instanceof CharSequence) ? target : BufferUtils.toHex(BufferUtils.EMPTY_HEX_SEPARATOR, (byte[]) target),
- offset, length, blockSize);
- }
-
- buffer = checkExtendedReplyBuffer(receive(sendExtendedCommand(buffer)));
- if (buffer == null) {
- throw new StreamCorruptedException("Missing extended reply data");
- }
-
- String targetType = buffer.getString();
- if (String.CASE_INSENSITIVE_ORDER.compare(targetType, SftpConstants.EXT_CHECK_FILE) != 0) {
- throw new StreamCorruptedException("Mismatched reply type: expected=" + SftpConstants.EXT_CHECK_FILE + ", actual=" + targetType);
- }
-
- String algo = buffer.getString();
- Collection<byte[]> hashes = new LinkedList<>();
- while (buffer.available() > 0) {
- byte[] hashValue = buffer.getBytes();
- hashes.add(hashValue);
- }
-
- return new SimpleImmutableEntry<>(algo, hashes);
- }
-}