[Cppfcplib] r14331 - trunk/apps/CppFCPLib

mkolar at freenetproject.org mkolar at freenetproject.org
Wed Jul 25 08:00:55 UTC 2007


Author: mkolar
Date: 2007-07-25 08:00:53 +0000 (Wed, 25 Jul 2007)
New Revision: 14331

Modified:
   trunk/apps/CppFCPLib/Exceptions.h
   trunk/apps/CppFCPLib/JobTicket.cpp
   trunk/apps/CppFCPLib/JobTicket.h
   trunk/apps/CppFCPLib/Message.cpp
   trunk/apps/CppFCPLib/Node.cpp
   trunk/apps/CppFCPLib/Node.h
   trunk/apps/CppFCPLib/NodeThread.cpp
   trunk/apps/CppFCPLib/ServerMessage.cpp
   trunk/apps/CppFCPLib/ServerMessage.h
Log:
* an effort toward better exceptions
* SubscribeUSK implemented



Modified: trunk/apps/CppFCPLib/Exceptions.h
===================================================================
--- trunk/apps/CppFCPLib/Exceptions.h	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/Exceptions.h	2007-07-25 08:00:53 UTC (rev 14331)
@@ -18,6 +18,26 @@
   ~FCPException() throw();
 };
 
+class FileError : public std::runtime_error {
+  std::string path_;
+public:
+  FileError( std::string msg, std::string path )
+    : std::runtime_error(msg),
+      path_(path) {}
+  const std::string& getFile() const { return path_; }
+  ~FileError() throw() {}
+};
+
+class NotImplemented : public std::logic_error {
+public:
+  NotImplemented(std::string msg) : std::logic_error(msg) {}
+};
+
+class CommandTimeout : public std::runtime_error {
+public:
+  CommandTimeout(std::string msg) : std::runtime_error(msg) {}
+};
+
 }
 
 #endif

Modified: trunk/apps/CppFCPLib/JobTicket.cpp
===================================================================
--- trunk/apps/CppFCPLib/JobTicket.cpp	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/JobTicket.cpp	2007-07-25 08:00:53 UTC (rev 14331)
@@ -37,12 +37,6 @@
   return cmd->getHeader();
 }
 
-const std::string&
-JobTicket::getMessageText() const
-{
-  return cmd->toString();
-}
-
 void
 JobTicket::wait(unsigned int timeout)
 {
@@ -65,9 +59,7 @@
     }
     log().log(DEBUG, "wait:"+this->getCommandName()+":"+this->getId()+": timeout on send command");
 
-    // TODO: should I maybe create a result here, and then when retrieving
-    // result throw an exception??
-    throw std::runtime_error("command timeout");
+    throw CommandTimeout("Timeout sending " + this->getCommandName());
   }
   log().log(DEBUG, "wait:"+this->getCommandName()+":"+this->getId()+": job now dispatched");
   while (!lock.tryAcquire(100)){
@@ -80,7 +72,7 @@
     }
     log().log(DEBUG, "wait:"+this->getCommandName()+":"+this->getId()+": timeout on node response");
 
-    throw std::runtime_error("command timeout");
+    throw CommandTimeout("Timeout sending " + this->getCommandName());
   }
   log().log(DEBUG, "wait:"+this->getCommandName()+":"+this->getId()+": job complete");
   lock.release();
@@ -100,10 +92,7 @@
       continue;
     }
     log().log(DEBUG, "wait:"+this->getCommandName()+":"+this->getId()+": timeout on send command");
-
-    // TODO: should I maybe create a result here, and then when retrieving
-    // result throw an exception??
-    throw std::runtime_error("command timeout");
+    throw CommandTimeout("Timeout sending " + this->getCommandName());
   }
 }
 
@@ -120,9 +109,6 @@
              " keepJob=" + Converter::toString( keep ) + "\n";
   repr += "Message=" + cmd->getHeader();
 
-  // TODO:
-  // add representation of hasResult and Result
-
   return repr;
 }
 

Modified: trunk/apps/CppFCPLib/JobTicket.h
===================================================================
--- trunk/apps/CppFCPLib/JobTicket.h	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/JobTicket.h	2007-07-25 08:00:53 UTC (rev 14331)
@@ -3,8 +3,8 @@
 
 #include "Message.h"
 #include "ServerMessage.h"
+#include "Exceptions.h"
 
-#include <stdexcept>
 #include <vector>
 #include <iostream>
 
@@ -70,7 +70,6 @@
 
   const std::string& getCommandName() const;
   const std::string& getId() const;
-  const std::string& getMessageText() const;
   const Message::Ptr getCommand() const;
 
   void wait(unsigned int timeout_=0);

Modified: trunk/apps/CppFCPLib/Message.cpp
===================================================================
--- trunk/apps/CppFCPLib/Message.cpp	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/Message.cpp	2007-07-25 08:00:53 UTC (rev 14331)
@@ -1,8 +1,11 @@
-#include "Message.h"
+
 #include <boost/lexical_cast.hpp>
 #include <iterator>
 #include <algorithm>
 
+#include "Message.h"
+#include "Exceptions.h"
+
 using namespace FCPLib;
 
 Message::Ptr
@@ -45,7 +48,7 @@
 void
 Message::setStream(std::istream* s_, int dataLength)
 {
-  throw std::runtime_error("Message::setStream not implemented");
+  throw NotImplemented("Message::setStream is not implemented.");
 }
 
 const std::string&

Modified: trunk/apps/CppFCPLib/Node.cpp
===================================================================
--- trunk/apps/CppFCPLib/Node.cpp	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/Node.cpp	2007-07-25 08:00:53 UTC (rev 14331)
@@ -449,6 +449,7 @@
   if (fields.hasField("Persistence")) m->setField("Persistence", fields.getField("Persistence"));
   if (fields.hasField("TargetFilename")) m->setField("TargetFilename", fields.getField("TargetFilename"));
   if (fields.hasField("EarlyEncode")) m->setField("EarlyEncode", fields.getField("EarlyEncode"));
+  if (fields.hasField("BinaryBlob")) m->setField("BinaryBlob", fields.getField("BinaryBlob"));
   m->setField("UploadFrom", "direct");
 
   m->setStream(s, dataLength);
@@ -479,6 +480,7 @@
   if (fields.hasField("Persistence")) m->setField("Persistence", fields.getField("Persistence"));
   if (fields.hasField("TargetFilename")) m->setField("TargetFilename", fields.getField("TargetFilename"));
   if (fields.hasField("EarlyEncode")) m->setField("EarlyEncode", fields.getField("EarlyEncode"));
+  if (fields.hasField("BinaryBlob")) m->setField("BinaryBlob", fields.getField("BinaryBlob"));
   m->setField("UploadFrom", "redirect");
   m->setField("TargetURI", target);
 
@@ -510,7 +512,7 @@
     std::ifstream is(filename.c_str(), std::ios::binary);
     if (!is.is_open()) {
       log().log(ERROR, "Error while opening file :: " + filename);
-      throw std::runtime_error("Error while opening file.");
+      throw FileError("Error while opening file.", filename);
     }
     unsigned char buf[1024];
 
@@ -525,8 +527,10 @@
     while (true) {
       int bytes_read;
       is.read((char*)buf, 1024);
-      if (is.fail())
-        throw std::runtime_error("Error while reading file.");
+      if (is.fail()) {
+        log().log(ERROR, "Error while reading file :: " + filename);
+        throw FileError("Error while reading file.", filename);
+      }
       bytes_read = is.gcount();
       if (!bytes_read) break;
       sha.write(buf, bytes_read);
@@ -550,6 +554,7 @@
   if (fields.hasField("Persistence")) m->setField("Persistence", fields.getField("Persistence"));
   if (fields.hasField("TargetFilename")) m->setField("TargetFilename", fields.getField("TargetFilename"));
   if (fields.hasField("EarlyEncode")) m->setField("EarlyEncode", fields.getField("EarlyEncode"));
+  if (fields.hasField("BinaryBlob")) m->setField("BinaryBlob", fields.getField("BinaryBlob"));
   m->setField("UploadFrom", "disk");
   m->setField("Filename", filename);
   if (!r.readDirectory)
@@ -572,7 +577,10 @@
     // error, try direct mode
 
     std::ifstream is(filename.c_str(), std::ios::binary);
-    // TODO: error checking
+    if (!is.is_open()) {
+      log().log(ERROR, "Error while opening file :: " + filename);
+      throw FileError("Error while opening file.", filename);
+    }
     is.seekg(0, std::ios_base::end);
     int pos = is.tellg();
     is.seekg(0, std::ios_base::beg);
@@ -581,6 +589,20 @@
   }
 }
 
+JobTicket::Ptr
+Node::subscribeUSK(const std::string USK, const std::string id, bool dontPoll)
+{
+  Message::Ptr m = Message::factory( std::string("SubscribeUSK") );
+  m->setField("USK", USK);
+  m->setField("Identifier", id);
+  m->setField("DontPoll", Converter::toString( dontPoll ));
+
+  JobTicket::Ptr job = JobTicket::factory( id, m, false );
+  clientReqQueue->put(job);
+
+  return job;
+}
+
 void
 Node::watchGlobal( bool enabled, int verbosity )
 {

Modified: trunk/apps/CppFCPLib/Node.h
===================================================================
--- trunk/apps/CppFCPLib/Node.h	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/Node.h	2007-07-25 08:00:53 UTC (rev 14331)
@@ -92,6 +92,8 @@
                          const AdditionalFields& = AdditionalFields()
                          );
 
+  JobTicket::Ptr subscribeUSK(const std::string, const std::string, bool);
+
   void watchGlobal( bool enabled, int verbosity );
   MessagePtrContainer listPersistentRequest();
 };

Modified: trunk/apps/CppFCPLib/NodeThread.cpp
===================================================================
--- trunk/apps/CppFCPLib/NodeThread.cpp	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/NodeThread.cpp	2007-07-25 08:00:53 UTC (rev 14331)
@@ -90,7 +90,7 @@
     log().log(NOISY, "sendClientReq : added the job to the map");
   }
 
-  s->send(job->getMessageText());
+  s->send(job->getCommand());
   job->timeQueued = (unsigned int) time(0);
 }
 

Modified: trunk/apps/CppFCPLib/ServerMessage.cpp
===================================================================
--- trunk/apps/CppFCPLib/ServerMessage.cpp	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/ServerMessage.cpp	2007-07-25 08:00:53 UTC (rev 14331)
@@ -108,7 +108,10 @@
   if (header == "UnknownPeerNoteType") {
     m = Ptr( new UnknownPeerNoteTypeMessage() );
   } else
-    throw new std::runtime_error("Not implemented " + header);
+  if (header == "SubscribedUSKUpdate") {
+    m = Ptr( new SubscribedUSKUpdate() );
+  } else
+    throw NotImplemented("Message " + header + " not implemented");
 
   m->message = Message::factory(header);
 

Modified: trunk/apps/CppFCPLib/ServerMessage.h
===================================================================
--- trunk/apps/CppFCPLib/ServerMessage.h	2007-07-25 00:40:22 UTC (rev 14330)
+++ trunk/apps/CppFCPLib/ServerMessage.h	2007-07-25 08:00:53 UTC (rev 14331)
@@ -3,7 +3,7 @@
 
 #include "Message.h"
 #include "Server.h"
-#include <exception>
+#include "Exceptions.h"
 #include <string>
 
 namespace FCPLib {
@@ -116,8 +116,8 @@
 typedef class ServerMessageT<IsLastTrue, true> UnknownNodeIdentifierMessage;
 typedef class ServerMessageT<IsLastTrue, true> UnknownPeerNoteTypeMessage;
 
+typedef class ServerMessageT<IsLastFalse, false> SubscribedUSKUpdate;
 
-
 }
 
 #endif // SERVERMESSAGE_H__




More information about the Cppfcplib mailing list