/******************************************************************************
* *
* Copyright 2017 Subterranean Security *
* *
* Licensed 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 com.subterranean_security.crimson.viewer.net.command;
import java.util.ArrayList;
import com.subterranean_security.crimson.core.Common;
import com.subterranean_security.crimson.core.net.MessageFuture.Timeout;
import com.subterranean_security.crimson.core.proto.FileManager.MI_CloseFileHandle;
import com.subterranean_security.crimson.core.proto.FileManager.RQ_AdvancedFileInfo;
import com.subterranean_security.crimson.core.proto.FileManager.RQ_Delete;
import com.subterranean_security.crimson.core.proto.FileManager.RQ_FileHandle;
import com.subterranean_security.crimson.core.proto.FileManager.RQ_FileListing;
import com.subterranean_security.crimson.core.proto.FileManager.RS_AdvancedFileInfo;
import com.subterranean_security.crimson.core.proto.FileManager.RS_FileListing;
import com.subterranean_security.crimson.core.proto.MSG.Message;
import com.subterranean_security.crimson.core.proto.Misc.Outcome;
import com.subterranean_security.crimson.core.store.ConnectionStore;
public class FileManagerCom {
public static int getFileHandle(int cid) {
try {
Message m = ConnectionStore.routeAndWait(
Message.newBuilder().setRid(cid).setSid(Common.cvid).setRqFileHandle(RQ_FileHandle.newBuilder()),
2);
if (m != null) {
return m.getRsFileHandle().getFmid();
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Timeout e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}
public static void closeFileHandle(int cid, int fmid) {
ConnectionStore.route(
Message.newBuilder().setRid(cid).setMiCloseFileHandle(MI_CloseFileHandle.newBuilder().setFmid(fmid)));
}
public static RS_FileListing fm_down(int cid, int fmid, String name, boolean mtime, boolean size) {
try {
Message m = ConnectionStore.routeAndWait(Message.newBuilder().setRid(cid).setSid(Common.cvid)
.setRqFileListing(RQ_FileListing.newBuilder().setDown(name).setFmid(fmid)), 10);
return m.getRsFileListing();
} catch (Exception e) {
return null;
}
}
public static RS_FileListing fm_up(int cid, int fmid, boolean mtime, boolean size) {
try {
Message m = ConnectionStore.routeAndWait(Message.newBuilder().setRid(cid).setSid(Common.cvid)
.setRqFileListing(RQ_FileListing.newBuilder().setUp(true).setFmid(fmid)), 10);
return m.getRsFileListing();
} catch (Exception e) {
return null;
}
}
public static RS_FileListing fm_list(int cid, int fmid, boolean mtime, boolean size) {
try {
Message m = ConnectionStore.routeAndWait(Message.newBuilder().setRid(cid).setSid(Common.cvid)
.setRqFileListing(RQ_FileListing.newBuilder().setFmid(fmid)), 10);
return m.getRsFileListing();
} catch (Exception e) {
return null;
}
}
public static RS_AdvancedFileInfo fm_file_info(int cid, String path) {
try {
Message m = ConnectionStore.routeAndWait(Message.newBuilder().setRid(cid).setSid(Common.cvid)
.setRqAdvancedFileInfo(RQ_AdvancedFileInfo.newBuilder().setFile(path)), 10);
return m.getRsAdvancedFileInfo();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Timeout e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static Outcome fm_delete(int cid, ArrayList<String> targets, boolean overwrite) {
Outcome.Builder outcome = Outcome.newBuilder();
try {
Message m = ConnectionStore.routeAndWait(Message.newBuilder().setRid(cid).setSid(Common.cvid)
.setRqDelete(RQ_Delete.newBuilder().addAllTarget(targets).setOverwrite(overwrite)), 10);
if (m == null) {
outcome.setResult(false).setComment("No response");
} else {
return m.getRsDelete().getOutcome();
}
} catch (InterruptedException e) {
outcome.setResult(false).setComment("Interrupted");
} catch (Timeout e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return outcome.build();
}
}