Selaa lähdekoodia

added error string to getBytesFromFile and changed executeHead

marius 5 vuotta sitten
vanhempi
commit
e5cd992a98
3 muutettua tiedostoa jossa 19 lisäystä ja 13 poistoa
  1. 3 2
      daemon/include/FileManager.h
  2. 8 3
      daemon/src/FileManager.cpp
  3. 8 8
      daemon/src/JsonCommander.cpp

+ 3 - 2
daemon/include/FileManager.h

@@ -124,9 +124,10 @@ public:
    * @param filename name of the files
    * @param numOfBytes the number of bytes you want
    *
-   * @return
+   * @return first: the array of chars containing the data if no error occured
+   *         second: an error string. Empty when no error occured
    */
-   std::vector<char> getBytesFromFile(std::string filename, int numOfBytes);
+   std::pair<std::vector<char>,std::string> getBytesFromFile(std::string filename, int numOfBytes);
 };
 
 #endif

+ 8 - 3
daemon/src/FileManager.cpp

@@ -84,7 +84,7 @@ std::vector<char> FileManager::readGet() {
   return data;
 }
 
-std::vector<char> FileManager::getBytesFromFile(std::string filename, int numOfBytes) {
+std::pair<std::vector<char>,std::string> FileManager::getBytesFromFile(std::string filename, int numOfBytes) {
   std::ifstream file;
   std::string fname = this->fileDirectory;
   fname.append(filename);
@@ -93,7 +93,12 @@ std::vector<char> FileManager::getBytesFromFile(std::string filename, int numOfB
   std::vector<char> bytes;
 
   if (!file.is_open()) {
-    return bytes;
+    return {bytes, "no such file"};
+  }
+
+  auto size = file.tellg();
+  if (size < numOfBytes) {
+    return {bytes, "file is smaller than specified size"};
   }
 
   char buff[8];
@@ -105,5 +110,5 @@ std::vector<char> FileManager::getBytesFromFile(std::string filename, int numOfB
 
   file.close();
 
-  return bytes;
+  return {bytes, ""};
 }

+ 8 - 8
daemon/src/JsonCommander.cpp

@@ -322,17 +322,17 @@ JsonCommander::Response JsonCommander::executeHead(const Json::Value &message) {
     response.json["data"] = "";
     response.json["error"] = "incorrect head command request";
   } else {
-    std::vector<char> res = fileManager.getBytesFromFile(message["file"].asString(), 4);
-    if (res.size() == 0) {
-      response.json["accept"] = false;
-      response.json["file"] = "";
-      response.json["data"] = "";
-      response.json["error"] = "error while reading from file";
-    } else {
+    std::pair<std::vector<char>,std::string>res = fileManager.getBytesFromFile(message["file"].asString(), 4);
+    if (res.second == "") {
       response.json["accept"] = true;
       response.json["file"] = message["file"];
-      response.json["data"] = base64::encodeVector(res);
+      response.json["data"] = base64::encodeVector(res.first);
       response.json["error"] = "";
+    } else {
+      response.json["accept"] = true;
+      response.json["file"] = message["file"];
+      response.json["data"] ="";
+      response.json["error"] = res.second;
     }
   }