|
@@ -3,7 +3,11 @@
|
|
|
|
|
|
#include <iostream>
|
|
|
|
|
|
-CmdMan::CmdMan(FileMan &fm) : fileman(fm) {
|
|
|
+#define DEBUGPRINT(x) debugprintfunc(x)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+CmdMan::CmdMan(FileMan &fm, void (*dpf)(string)) : fileman(fm) {
|
|
|
|
|
|
|
|
|
Json::CharReaderBuilder rbuilder;
|
|
@@ -43,70 +47,74 @@ CmdMan::CmdMan(FileMan &fm) : fileman(fm) {
|
|
|
handlemap["list"] = &CmdMan::handleList;
|
|
|
handlemap["version"] = &CmdMan::handleVersion;
|
|
|
handlemap["login"] = &CmdMan::handleLogin;
|
|
|
+
|
|
|
+ debugprintfunc = dpf;
|
|
|
}
|
|
|
|
|
|
CmdMan::~CmdMan() { delete reader; }
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdHelp(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value root, arr;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
map<string, string>::iterator it;
|
|
|
+ root["command"] = "help";
|
|
|
for (it = helpmap.begin(); it != helpmap.end(); it++) {
|
|
|
- retval.msg.append(it->first);
|
|
|
- retval.msg.append(" - ");
|
|
|
- retval.msg.append(it->second);
|
|
|
- retval.msg.append("\n");
|
|
|
+ arr.append(it->first + " - " + it->second);
|
|
|
}
|
|
|
- retval.type = notsend;
|
|
|
+ root["names"] = arr;
|
|
|
+ retval.type = print;
|
|
|
+ retval.msg = root;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdStatus(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
root["command"] = "status";
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdDisconnect(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
root["command"] = "close";
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdPut(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
|
|
|
bool opened = fileman.openPut(args[0]);
|
|
|
+ root["command"] = "put";
|
|
|
+ root["file"] = fileman.getPutName();
|
|
|
if (opened) {
|
|
|
- root["command"] = "put";
|
|
|
- root["file"] = fileman.getPutName();
|
|
|
root["size"] = fileman.getPutSize();
|
|
|
root["chunks"] = fileman.getPutChunks();
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
} else {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "couldnt open local file \"" + args[0] + "\"";
|
|
|
+ root["accept"] = false;
|
|
|
+ root["error"] = "couldnt open local file \"" + args[0] + "\"";
|
|
|
}
|
|
|
|
|
|
+ retval.msg = root;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdPutdata(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
|
|
|
root["command"] = "putdata";
|
|
@@ -117,33 +125,34 @@ CmdMan::CmdRet CmdMan::cmdPutdata(vector<string> args) {
|
|
|
fileman
|
|
|
.getPutRemainingChunks();
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdGet(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
|
|
|
bool opened = fileman.openGet(args[0]);
|
|
|
+ root["command"] = "get";
|
|
|
+ root["file"] = fileman.getGetName();
|
|
|
if (opened) {
|
|
|
- root["command"] = "get";
|
|
|
- root["file"] = fileman.getGetName();
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
} else {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "local file \"" + args[0] + "\" already exists";
|
|
|
+ root["accept"] = false;
|
|
|
+ root["error"] = "local file \"" + args[0] + "\" already exists";
|
|
|
}
|
|
|
|
|
|
+ retval.msg = root;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdGetdata(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
|
|
|
root["command"] = "getdata";
|
|
@@ -151,49 +160,51 @@ CmdMan::CmdRet CmdMan::cmdGetdata(vector<string> args) {
|
|
|
root["chunk"] = fileman.getGetRemainingChunks();
|
|
|
root["cancel"] = false;
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdList(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
|
|
|
bool opened = fileman.openList();
|
|
|
+ root["command"] = "list";
|
|
|
if (opened) {
|
|
|
- root["command"] = "list";
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
} else {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "cannot list, already listing";
|
|
|
+ root["accept"] = false;
|
|
|
+ root["names"] = "";
|
|
|
+ root["error"] = "cannot list, already listing";
|
|
|
}
|
|
|
|
|
|
+ retval.msg = root;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdListdata(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
root["command"] = "listdata";
|
|
|
root["chunk"] = fileman.getListRemainingChunks();
|
|
|
root["cancel"] = false;
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::execute(string cmd, vector<string> args) {
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " using command \"" << cmd
|
|
|
- << "\" with arguments [ ";
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " using command \"" + cmd +
|
|
|
+ "\" with arguments [ ");
|
|
|
for (string s : args)
|
|
|
- std::cerr << s << " ";
|
|
|
- std::cerr << "]" << std::endl;
|
|
|
+ DEBUGPRINT(s + " ");
|
|
|
+ DEBUGPRINT("]\n");
|
|
|
map<string, CmdRet (CmdMan::*)(vector<string>)>::iterator it =
|
|
|
execmap.find(cmd);
|
|
|
string retmsg;
|
|
@@ -207,11 +218,11 @@ CmdMan::CmdRet CmdMan::execute(string cmd, vector<string> args) {
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdVersion(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
root["version"] = protocolVersion;
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
doversion = true;
|
|
|
|
|
@@ -220,14 +231,14 @@ CmdMan::CmdRet CmdMan::cmdVersion(vector<string> args) {
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::cmdLogin(vector<string> args) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
Json::Value root;
|
|
|
root["user"] = args[0];
|
|
|
root["pass"] = args[1];
|
|
|
root["login"] = true;
|
|
|
root["cancel"] = false;
|
|
|
retval.type = send;
|
|
|
- retval.msg = Json::writeString(wbuilder, root);
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
dologin = true;
|
|
|
|
|
@@ -245,13 +256,13 @@ CmdMan::CmdRet CmdMan::cmdLogin(vector<string> args) {
|
|
|
*/
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handle(Json::Value root) {
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
if (doversion)
|
|
|
root["command"] = "version";
|
|
|
else if (dologin)
|
|
|
root["command"] = "login";
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " using json" << std::endl
|
|
|
- << root << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " using json\n" +
|
|
|
+ Json::writeString(wbuilder, root) + "\n");
|
|
|
string retmsg;
|
|
|
map<string, CmdRet (CmdMan::*)(Json::Value)>::iterator it =
|
|
|
handlemap.find(root["command"].asString());
|
|
@@ -265,231 +276,277 @@ CmdMan::CmdRet CmdMan::handle(Json::Value root) {
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleStatus(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
- retval.type = notsend;
|
|
|
- retval.msg = root["response"].asString();
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
+ retval.type = print;
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleClose(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
retval.type = close;
|
|
|
- retval.msg = root["response"].asString();
|
|
|
+ retval.msg = root;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handlePut(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output;
|
|
|
+ output["command"] = "put";
|
|
|
+ output["file"] = fileman.getPutName();
|
|
|
+ output["accept"] = false;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
|
|
|
if (!root["accept"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "File upload request failed: Server reports: " +
|
|
|
- root["error"].asString();
|
|
|
+ output["error"] = "Server reports: " + root["error"].asString();
|
|
|
+ fileman.cancelPut();
|
|
|
} else if (root["file"].asString() != fileman.getPutName()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "File upload request failed: Server reports filename " +
|
|
|
- root["file"].asString() + " but actual filename is " +
|
|
|
- fileman.getPutName();
|
|
|
+ output["error"] = "Server reports filename " + root["file"].asString() +
|
|
|
+ " but actual filename is " + fileman.getPutName();
|
|
|
+ fileman.cancelPut();
|
|
|
} else {
|
|
|
- retval.type = send;
|
|
|
- retval.msg = "putdata";
|
|
|
+ output["accept"] = true;
|
|
|
+ output["error"] = "";
|
|
|
+ retval.type = print | send;
|
|
|
+ retval.nextcommand = "putdata";
|
|
|
}
|
|
|
+ retval.msg = output;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handlePutdata(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
+ output["command"] = "putdata";
|
|
|
+ output["file"] = fileman.getPutName();
|
|
|
+ output["speed"] = 0.0f;
|
|
|
+ output["cancel"] = true;
|
|
|
|
|
|
if (root["received"].asInt() != fileman.getPutRemainingChunks()) {
|
|
|
|
|
|
|
|
|
retval.type = error;
|
|
|
- retval.msg = std::string("File upload failed: Server reports number of "
|
|
|
- "remaining chunks as ") +
|
|
|
- std::to_string(root["received"].asInt()) +
|
|
|
- " but actual number is " +
|
|
|
- std::to_string(fileman.getPutRemainingChunks());
|
|
|
+ output["error"] = std::string("Server reports number of "
|
|
|
+ "remaining chunks as ") +
|
|
|
+ std::to_string(root["received"].asInt()) +
|
|
|
+ " but actual number is " +
|
|
|
+ std::to_string(fileman.getPutRemainingChunks());
|
|
|
fileman.cancelPut();
|
|
|
} else if (root["cancel"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg =
|
|
|
- "File upload cancelles: Server reports: " + root["error"].asString();
|
|
|
+ output["error"] = "Server reports: " + root["error"].asString();
|
|
|
fileman.cancelPut();
|
|
|
} else if (root["file"].asString() != fileman.getPutName()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "File upload request failed: Server reports filename " +
|
|
|
- root["file"].asString() + " but actual filename is " +
|
|
|
- fileman.getPutName();
|
|
|
+ output["error"] = "Server reports filename " + root["file"].asString() +
|
|
|
+ " but actual filename is " + fileman.getPutName();
|
|
|
fileman.cancelPut();
|
|
|
} else {
|
|
|
+ output["cancel"] = false;
|
|
|
+ output["error"] = "";
|
|
|
|
|
|
if (!root["received"].asInt()) {
|
|
|
|
|
|
- retval.type = notsend;
|
|
|
- retval.msg = "succesfully uploaded file " + fileman.getPutName();
|
|
|
+ retval.type = print;
|
|
|
+
|
|
|
+
|
|
|
fileman.closePut();
|
|
|
} else {
|
|
|
- retval.type = send;
|
|
|
- retval.msg = "putdata";
|
|
|
+ retval.type = print | send;
|
|
|
+ retval.nextcommand = "putdata";
|
|
|
}
|
|
|
}
|
|
|
+ retval.msg = output;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleGet(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output;
|
|
|
+ output["command"] = "get";
|
|
|
+ output["file"] = fileman.getGetName();
|
|
|
+ output["accept"] = false;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
|
|
|
if (!root["accept"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "File download request failed: Server reports: " +
|
|
|
- root["error"].asString();
|
|
|
+ output["error"] = "Server reports: " + root["error"].asString();
|
|
|
} else if (root["file"].asString() != fileman.getGetName()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "File download request failed: Server reports filename " +
|
|
|
- root["file"].asString() + " but actual filename is " +
|
|
|
- fileman.getGetName();
|
|
|
+ output["error"] = "Server reports filename " + root["file"].asString() +
|
|
|
+ " but actual filename is " + fileman.getGetName();
|
|
|
} else {
|
|
|
fileman.setGetChunks(root["chunks"].asInt());
|
|
|
- retval.type = send;
|
|
|
- retval.msg = "getdata";
|
|
|
+ output["accept"] = true;
|
|
|
+ output["error"] = "";
|
|
|
+ retval.type = print | send;
|
|
|
+ retval.nextcommand = "getdata";
|
|
|
}
|
|
|
+ retval.msg = output;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleGetdata(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
+ output["command"] = "getdata";
|
|
|
+ output["file"] = fileman.getGetName();
|
|
|
+ output["speed"] = 0.0f;
|
|
|
+ output["cancel"] = true;
|
|
|
|
|
|
|
|
|
if (root["remaining"].asInt() != fileman.getGetRemainingChunks()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = std::string("File download failed: Server reports number of "
|
|
|
- "remaining chunks as ") +
|
|
|
- std::to_string(root["remaining"].asInt()) +
|
|
|
- " but actual number is " +
|
|
|
- std::to_string(fileman.getGetRemainingChunks());
|
|
|
+ output["error"] =
|
|
|
+ std::string("Server reports number of remaining chunks as ") +
|
|
|
+ std::to_string(root["remaining"].asInt()) + " but actual number is " +
|
|
|
+ std::to_string(fileman.getGetRemainingChunks());
|
|
|
fileman.cancelGet();
|
|
|
} else if (root["cancel"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg =
|
|
|
- "File download cancelled: Server reports: " + root["error"].asString();
|
|
|
+ output["error"] = "Server reports: " + root["error"].asString();
|
|
|
fileman.cancelGet();
|
|
|
} else if (root["file"].asString() != fileman.getGetName()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "File download failed: Server reports filename " +
|
|
|
- root["file"].asString() + " but actual filename is " +
|
|
|
- fileman.getGetName();
|
|
|
+ output["error"] = "Server reports filename " + root["file"].asString() +
|
|
|
+ " but actual filename is " + fileman.getGetName();
|
|
|
fileman.cancelGet();
|
|
|
} else {
|
|
|
+ output["cancel"] = false;
|
|
|
+ output["error"] = "";
|
|
|
fileman.writeBase64(root["data"].asString());
|
|
|
|
|
|
if (fileman.getGetRemainingChunks() < 0) {
|
|
|
|
|
|
- retval.type = notsend;
|
|
|
- retval.msg = "succesfully downloaded file " + fileman.getGetName();
|
|
|
+ retval.type = print;
|
|
|
+
|
|
|
fileman.closeGet();
|
|
|
} else {
|
|
|
- retval.type = send;
|
|
|
- retval.msg = "getdata";
|
|
|
+ retval.type = print | send;
|
|
|
+ retval.nextcommand = "getdata";
|
|
|
}
|
|
|
}
|
|
|
+ retval.msg = output;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleList(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
+
|
|
|
+ output["command"] = "list";
|
|
|
+ output["names"] = "";
|
|
|
|
|
|
if (!root["accept"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "File listing request failed: Server reports: " +
|
|
|
- root["error"].asString();
|
|
|
+ output["accept"] = false;
|
|
|
+ output["error"] = "Server reports: " + root["error"].asString();
|
|
|
+ fileman.cancelList();
|
|
|
} else {
|
|
|
fileman.setListChunks(root["chunks"].asInt());
|
|
|
retval.type = send;
|
|
|
- retval.msg = "listdata";
|
|
|
+ output["accept"] = true;
|
|
|
+ retval.nextcommand = "listdata";
|
|
|
}
|
|
|
|
|
|
+ retval.msg = output;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleListdata(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output, arr;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
vector<string> toadd;
|
|
|
|
|
|
+ output["command"] = "list";
|
|
|
+ output["names"] = "";
|
|
|
+ output["accept"] = false;
|
|
|
|
|
|
if (root["remaining"].asInt() != fileman.getListRemainingChunks()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = std::string("File listing failed: Server reports number of "
|
|
|
- "remaining chunks as ") +
|
|
|
- std::to_string(root["remaining"].asInt()) +
|
|
|
- " but actual number is " +
|
|
|
- std::to_string(fileman.getListRemainingChunks());
|
|
|
+ output["error"] = std::string("Server reports number of "
|
|
|
+ "remaining chunks as ") +
|
|
|
+ std::to_string(root["remaining"].asInt()) +
|
|
|
+ " but actual number is " +
|
|
|
+ std::to_string(fileman.getListRemainingChunks());
|
|
|
fileman.cancelList();
|
|
|
} else if (root["cancel"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg =
|
|
|
- "File listing cancelled: Server reports: " + root["error"].asString();
|
|
|
+ output["error"] = "Server reports: " + root["error"].asString();
|
|
|
fileman.cancelList();
|
|
|
} else {
|
|
|
+ output["accept"] = true;
|
|
|
for (Json::Value i : root["names"])
|
|
|
toadd.push_back(i.asString());
|
|
|
fileman.putListData(toadd);
|
|
|
|
|
|
if (!fileman.getListRemainingChunks()) {
|
|
|
|
|
|
- retval.type = notsend;
|
|
|
- retval.msg = "Files on server:\n";
|
|
|
+ retval.type = print;
|
|
|
for (string s : fileman.getListData())
|
|
|
- retval.msg += s + "\n";
|
|
|
+ arr.append(s);
|
|
|
+ output["names"] = arr;
|
|
|
fileman.closeList();
|
|
|
} else {
|
|
|
- retval.type = send;
|
|
|
- retval.msg = "listdata";
|
|
|
+ retval.type = print | send;
|
|
|
+ retval.nextcommand = "listdata";
|
|
|
}
|
|
|
}
|
|
|
+ retval.msg = output;
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleVersion(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
+
|
|
|
+ output["command"] = "version";
|
|
|
+ output["serverversion"] = root["version"].asString();
|
|
|
+ output["clientversion"] = protocolVersion;
|
|
|
|
|
|
if (!root["accept"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "Version check failed: Server reports " +
|
|
|
- root["version"].asString() + " but client is version " +
|
|
|
- protocolVersion;
|
|
|
+ output["accept"] = false;
|
|
|
} else {
|
|
|
- retval.type = seton;
|
|
|
- retval.msg = "Version check ok.";
|
|
|
+ retval.type = print | seton;
|
|
|
+ output["accept"] = true;
|
|
|
doversion = false;
|
|
|
}
|
|
|
+ retval.msg = output;
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
CmdMan::CmdRet CmdMan::handleLogin(Json::Value root) {
|
|
|
CmdRet retval;
|
|
|
- std::cerr << __PRETTY_FUNCTION__ << " begin" << std::endl;
|
|
|
+ Json::Value output;
|
|
|
+ DEBUGPRINT(string(__PRETTY_FUNCTION__) + " begin");
|
|
|
+
|
|
|
+ output["command"] = "login";
|
|
|
|
|
|
if (!root["accept"].asBool()) {
|
|
|
retval.type = error;
|
|
|
- retval.msg = "Login failed: " + root["error"].asString();
|
|
|
+ output["error"] = root["error"].asString();
|
|
|
+ output["accept"] = false;
|
|
|
} else {
|
|
|
- retval.type = seton;
|
|
|
- retval.msg = "Login ok.";
|
|
|
+ retval.type = print | seton;
|
|
|
+ output["error"] = "";
|
|
|
+ output["accept"] = true;
|
|
|
dologin = false;
|
|
|
}
|
|
|
+ retval.msg = output;
|
|
|
|
|
|
return retval;
|
|
|
}
|