[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