Skip to content
Snippets Groups Projects
Commit 072a3d72 authored by Marco De Marco's avatar Marco De Marco
Browse files

Server compiled, ready for test

parent 2c738a6e
No related branches found
No related tags found
No related merge requests found
#include <FileManager.h> #include <FileWrapper.h>
#include <stdexcept>
namespace DataExporter_ns namespace DataExporter_ns
{ {
//============================================================================== //==============================================================================
// FileManager::FileManager() // FileWrapper::FileWrapper()
//============================================================================== //==============================================================================
FileManager::FileManager(Tango::DeviceImpl* deviceImpl_p, FileWrapper::FileWrapper(Tango::DeviceImpl* deviceImpl_p,
boost::filesystem::path& path) : Tango::LogAdapter(deviceImpl_p) boost::filesystem::path& path) : Tango::LogAdapter(deviceImpl_p)
{ {
DEBUG_STREAM << "FileManager::FileManager()" << endl; DEBUG_STREAM << "FileWrapper::FileWrapper()" << endl;
m_inputFileStream.open(path.string(), std::ios::binary | std::ios::ate); m_inputFileStream.open(path.string(), std::ios::binary | std::ios::ate);
...@@ -20,51 +19,56 @@ FileManager::FileManager(Tango::DeviceImpl* deviceImpl_p, ...@@ -20,51 +19,56 @@ FileManager::FileManager(Tango::DeviceImpl* deviceImpl_p,
} }
//============================================================================== //==============================================================================
// FileManager::~FileManager() // FileWrapper::~FileWrapper()
//============================================================================== //==============================================================================
FileManager::~FileManager() FileWrapper::~FileWrapper()
{ {
DEBUG_STREAM << "FileManager::~FileManager()" << endl; DEBUG_STREAM << "FileWrapper::~FileWrapper()" << endl;
m_inputFileStream.close(); m_inputFileStream.close();
} }
//============================================================================== //==============================================================================
// FileManager::create() // FileWrapper::create()
//============================================================================== //==============================================================================
FileManager::SP FileManager::create(Tango::DeviceImpl* deviceImpl_p, FileWrapper::SP FileWrapper::create(Tango::DeviceImpl* deviceImpl_p,
boost::filesystem::path& path) boost::filesystem::path& path)
{ {
FileManager::SP d_sp(new FileManager(deviceImpl_p, path), FileWrapper::SP d_sp(new FileWrapper(deviceImpl_p, path),
FileManager::Deleter()); FileWrapper::Deleter());
return d_sp; return d_sp;
} }
//============================================================================== //==============================================================================
// FileManager::isOpen() // FileWrapper::isOpen()
//============================================================================== //==============================================================================
bool FileManager::isOpen() bool FileWrapper::isOpen()
{ {
return m_inputFileStream.is_open(); return m_inputFileStream.is_open();
} }
//============================================================================== //==============================================================================
// FileManager::isCompleted() // FileWrapper::isBad()
//============================================================================== //==============================================================================
bool FileManager::isCompleted() bool FileWrapper::isBad()
{ {
return m_inputFileStream.tellg() >= m_inputFileSize; return m_inputFileStream.bad();
} }
//============================================================================== //==============================================================================
// FileManager::read() // FileWrapper::isCompleted()
//============================================================================== //==============================================================================
void FileManager::read(std::vector<char>& writeBuff) throw(std::runtime_error) bool FileWrapper::isCompleted()
{ {
if(m_inputFileStream.tellg() >= m_inputFileSize) return m_inputFileStream.tellg() >= m_inputFileSize;
throw std::runtime_error("Already completed"); }
//==============================================================================
// FileWrapper::read()
//==============================================================================
void FileWrapper::read(std::vector<char>& writeBuff) throw(std::runtime_error)
{
int leftToRead = m_inputFileSize - m_inputFileStream.tellg(); int leftToRead = m_inputFileSize - m_inputFileStream.tellg();
int bufferSize = 0; int bufferSize = 0;
......
#ifndef FILEMANAGER_H #ifndef FILEWRAPPER_H
#define FILEMANAGER_H #define FILEWRAPPER_H
#include <Configuration.h> #include <Configuration.h>
...@@ -10,41 +10,43 @@ ...@@ -10,41 +10,43 @@
namespace DataExporter_ns namespace DataExporter_ns
{ {
class FileManager : public Tango::LogAdapter class FileWrapper : public Tango::LogAdapter
{ {
public: public:
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Public] Shared pointer typedef // [Public] Shared pointer typedef
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
typedef boost::shared_ptr<FileManager> SP; typedef boost::shared_ptr<FileWrapper> SP;
protected: protected:
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Protected] Constructor destructor deleter // [Protected] Constructor destructor deleter
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
FileManager(Tango::DeviceImpl*, boost::filesystem::path&); FileWrapper(Tango::DeviceImpl*, boost::filesystem::path&);
virtual ~FileManager(); virtual ~FileWrapper();
class Deleter; class Deleter;
friend Deleter; friend Deleter;
class Deleter class Deleter
{ {
public: public:
void operator()(FileManager* d) { delete d; } void operator()(FileWrapper* d) { delete d; }
}; };
public: public:
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Public] Class creation method // [Public] Class creation method
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
static FileManager::SP create(Tango::DeviceImpl*, boost::filesystem::path&); static FileWrapper::SP create(Tango::DeviceImpl*, boost::filesystem::path&);
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Public] Input stream methods // [Public] Input stream methods
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
virtual bool isOpen(); virtual bool isOpen();
virtual bool isBad();
virtual bool isCompleted(); virtual bool isCompleted();
virtual void read(std::vector<char>&) throw(std::runtime_error); virtual void read(std::vector<char>&) throw(std::runtime_error);
...@@ -65,4 +67,4 @@ protected: ...@@ -65,4 +67,4 @@ protected:
} //End of namespace } //End of namespace
#endif /* FILEMANAGER_H */ #endif /* FILEWRAPPER_H */
...@@ -154,52 +154,40 @@ void PlainSession::startWriteResponse() ...@@ -154,52 +154,40 @@ void PlainSession::startWriteResponse()
{ {
ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from " ERROR_STREAM << "SSLSession::startWriteResponse() unknown error from "
<< m_remoteEndpoint << endl; << m_remoteEndpoint << endl;
} }
} }
//============================================================================== //==============================================================================
// PlainSession::startWriteData() // PlainSession::startWriteData()
//============================================================================== //==============================================================================
void PlainSession::startWriteData() void PlainSession::startWriteData(FileWrapper::SP fileWrapper_sp)
{ {
try try
{ {
if(!m_inputStream.bad()) if(!fileWrapper_sp->isBad())
{ {
if(m_inputStream.tellg()<m_inputStreamSize) if(!fileWrapper_sp->isCompleted())
{ {
int leftToRead = m_inputStreamSize - m_inputStream.tellg();
int bufferSize = 0;
if(leftToRead < BUFFER_SIZE)
bufferSize = leftToRead;
else
bufferSize = BUFFER_SIZE;
std::vector<char> writeBuff; std::vector<char> writeBuff;
writeBuff.resize(bufferSize);
m_inputStream.read(&writeBuff[0], bufferSize); fileWrapper_sp->read(writeBuff);
boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff), boost::asio::async_write(m_plainSocket, boost::asio::buffer(writeBuff),
m_strand.wrap(boost::bind(&PlainSession::handleWriteData, m_strand.wrap(boost::bind(&PlainSession::handleWriteData,
shared_from_this(), boost::asio::placeholders::error))); shared_from_this(), fileWrapper_sp,
boost::asio::placeholders::error)));
} }
else else
{ {
INFO_STREAM << "SSLSession::startWriteData() " INFO_STREAM << "PlainSession::startWriteData() "
<< " transfer completed " << endl; << " transfer completed " << endl;
m_inputStream.close();
startReadRequestHeader(); startReadRequestHeader();
} }
} }
else else
{ {
ERROR_STREAM << "SSLSession::startWriteData() error on file I/O " ERROR_STREAM << "PlainSession::startWriteData() error on file I/O "
<< "from " << m_remoteEndpoint << endl; << "from " << m_remoteEndpoint << endl;
} }
} }
......
...@@ -54,7 +54,7 @@ protected: ...@@ -54,7 +54,7 @@ protected:
virtual void startWriteResponse(); virtual void startWriteResponse();
virtual void startWriteData(); virtual void startWriteData(FileWrapper::SP);
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Protected] Class variables // [Protected] Class variables
......
...@@ -11,8 +11,8 @@ namespace DataExporter_ns ...@@ -11,8 +11,8 @@ namespace DataExporter_ns
//============================================================================== //==============================================================================
ProtocolManager::ProtocolManager(Tango::DeviceImpl* deviceImpl_p, ProtocolManager::ProtocolManager(Tango::DeviceImpl* deviceImpl_p,
Configuration::SP configuration_sp, DBManager::SP dBManager_sp) : Configuration::SP configuration_sp, DBManager::SP dBManager_sp) :
Tango::LogAdapter(deviceImpl_p), m_configuration_sp(configuration_sp), Tango::LogAdapter(deviceImpl_p), m_deviceImpl_p(deviceImpl_p),
m_dBManager_sp(dBManager_sp) m_configuration_sp(configuration_sp), m_dBManager_sp(dBManager_sp)
{ {
DEBUG_STREAM << "ProtocolManager::ProtocolManager()" << endl; DEBUG_STREAM << "ProtocolManager::ProtocolManager()" << endl;
} }
...@@ -55,14 +55,17 @@ ResponseSP ProtocolManager::prepareResponse(RequestSP request_sp) ...@@ -55,14 +55,17 @@ ResponseSP ProtocolManager::prepareResponse(RequestSP request_sp)
{ {
DEBUG_STREAM << "ProtocolManager::prepareResponse()" << endl; DEBUG_STREAM << "ProtocolManager::prepareResponse()" << endl;
m_fileFound = false;
m_fileWrapper_sp.reset();
if(!request_sp->IsInitialized()) if(!request_sp->IsInitialized())
throw std::runtime_error("Not initialized request!"); throw std::runtime_error("Not initialized request!");
ResponseSP response_sp(new Response());
std::string username = request_sp->username(); std::string username = request_sp->username();
std::string password = request_sp->password(); std::string password = request_sp->password();
ResponseSP response_sp(new Response());
if(m_configuration_sp->isUserAuthorized(username, password)) if(m_configuration_sp->isUserAuthorized(username, password))
{ {
std::string schema = request_sp->schema(); std::string schema = request_sp->schema();
...@@ -91,8 +94,13 @@ ResponseSP ProtocolManager::prepareResponse(RequestSP request_sp) ...@@ -91,8 +94,13 @@ ResponseSP ProtocolManager::prepareResponse(RequestSP request_sp)
boost::uint64_t fileSize = boost::uint64_t fileSize =
boost::filesystem::file_size(absolutePath); boost::filesystem::file_size(absolutePath);
DEBUG_STREAM << "ProtocolManager::prepareResponse() " INFO_STREAM << "ProtocolManager::prepareResponse() "
<< "file size " << fileSize << endl; << " transfer file " << fileName << " version "
<< fileVersion << " size " << fileSize << endl;
m_fileFound = true;
m_fileWrapper_sp =
FileWrapper::create(m_deviceImpl_p, absolutePath);
response_sp->set_state(Response::REQUEST_ACCEPTED); response_sp->set_state(Response::REQUEST_ACCEPTED);
response_sp->set_status("Request accepted"); response_sp->set_status("Request accepted");
...@@ -153,6 +161,29 @@ ResponseSP ProtocolManager::prepareResponse(RequestSP request_sp) ...@@ -153,6 +161,29 @@ ResponseSP ProtocolManager::prepareResponse(RequestSP request_sp)
return response_sp; return response_sp;
} }
//==============================================================================
// ProtocolManager::isFileFound()
//==============================================================================
bool ProtocolManager::isFileFound()
{
DEBUG_STREAM << "ProtocolManager::isFileFound()" << endl;
return m_fileFound;
}
//==============================================================================
// ProtocolManager::getFileWrapper()
//==============================================================================
FileWrapper::SP ProtocolManager::getFileWrapper() throw(std::runtime_error)
{
DEBUG_STREAM << "ProtocolManager::getFileWrapper()" << endl;
if(!m_fileWrapper_sp)
throw std::runtime_error("File wrapper not created");
return m_fileWrapper_sp;
}
//============================================================================== //==============================================================================
// ProtocolManager::composePath() // ProtocolManager::composePath()
//============================================================================== //==============================================================================
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <Request.pb.h> #include <Request.pb.h>
#include <Configuration.h> #include <Configuration.h>
#include <DBManager.h> #include <DBManager.h>
#include <FileWrapper.h>
#include <tango.h> #include <tango.h>
...@@ -61,6 +62,13 @@ public: ...@@ -61,6 +62,13 @@ public:
virtual ResponseSP prepareResponse(RequestSP) virtual ResponseSP prepareResponse(RequestSP)
throw(std::runtime_error); throw(std::runtime_error);
//------------------------------------------------------------------------------
// [Public] File transfer methods
//------------------------------------------------------------------------------
bool isFileFound();
FileWrapper::SP getFileWrapper() throw(std::runtime_error);
protected: protected:
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Protected] // [Protected]
...@@ -71,6 +79,9 @@ protected: ...@@ -71,6 +79,9 @@ protected:
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Protected] Class variables // [Protected] Class variables
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
//Device implementation pointer
Tango::DeviceImpl* m_deviceImpl_p;
//Configuration parameters shared pointer //Configuration parameters shared pointer
Configuration::SP m_configuration_sp; Configuration::SP m_configuration_sp;
...@@ -79,6 +90,12 @@ protected: ...@@ -79,6 +90,12 @@ protected:
//Address and port of remote endpoint //Address and port of remote endpoint
std::string m_remoteEndpoint; std::string m_remoteEndpoint;
//File to transfer found
bool m_fileFound;
//File to transfer wrapper
FileWrapper::SP m_fileWrapper_sp;
}; };
} //End of namespace } //End of namespace
......
...@@ -196,39 +196,28 @@ void SSLSession::startWriteResponse() ...@@ -196,39 +196,28 @@ void SSLSession::startWriteResponse()
//============================================================================== //==============================================================================
// SSLSession::startWriteData() // SSLSession::startWriteData()
//============================================================================== //==============================================================================
void SSLSession::startWriteData() void SSLSession::startWriteData(FileWrapper::SP fileWrapper_sp)
{ {
try try
{ {
if(!m_inputStream.bad()) if(!fileWrapper_sp->isBad())
{ {
if(m_inputStream.tellg() < m_inputStreamSize) if(!fileWrapper_sp->isCompleted())
{ {
int leftToRead = m_inputStreamSize - m_inputStream.tellg();
int bufferSize = 0;
if(leftToRead < BUFFER_SIZE)
bufferSize = leftToRead;
else
bufferSize = BUFFER_SIZE;
std::vector<char> writeBuff; std::vector<char> writeBuff;
writeBuff.resize(bufferSize);
m_inputStream.read(&writeBuff[0], bufferSize); fileWrapper_sp->read(writeBuff);
boost::asio::async_write(m_sslSocket, boost::asio::buffer(writeBuff), boost::asio::async_write(m_sslSocket, boost::asio::buffer(writeBuff),
m_strand.wrap(boost::bind(&SSLSession::handleWriteData, m_strand.wrap(boost::bind(&SSLSession::handleWriteData,
shared_from_this(), boost::asio::placeholders::error))); shared_from_this(), fileWrapper_sp,
boost::asio::placeholders::error)));
} }
else else
{ {
INFO_STREAM << "SSLSession::startWriteData() " INFO_STREAM << "SSLSession::startWriteData() "
<< " transfer completed " << endl; << " transfer completed " << endl;
m_inputStream.close();
startReadRequestHeader(); startReadRequestHeader();
} }
} }
......
...@@ -64,7 +64,7 @@ protected: ...@@ -64,7 +64,7 @@ protected:
virtual void startWriteResponse(); virtual void startWriteResponse();
virtual void startWriteData(); virtual void startWriteData(FileWrapper::SP);
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Protected] Class variables // [Protected] Class variables
......
...@@ -82,14 +82,14 @@ void Session::handleWriteResponse(const boost::system::error_code& errorCode) ...@@ -82,14 +82,14 @@ void Session::handleWriteResponse(const boost::system::error_code& errorCode)
if(!errorCode) if(!errorCode)
{ {
// if() if(m_protocolManager_sp->isFileFound())
// { {
// //TODO: open file and start read startWriteData(m_protocolManager_sp->getFileWrapper());
// } }
// else else
// { {
// startReadRequestHeader(); startReadRequestHeader();
// } }
} }
else if(errorCode == boost::asio::error::eof) else if(errorCode == boost::asio::error::eof)
{ {
...@@ -106,11 +106,12 @@ void Session::handleWriteResponse(const boost::system::error_code& errorCode) ...@@ -106,11 +106,12 @@ void Session::handleWriteResponse(const boost::system::error_code& errorCode)
//============================================================================== //==============================================================================
// Session::handleWriteData() // Session::handleWriteData()
//============================================================================== //==============================================================================
void Session::handleWriteData(const boost::system::error_code& errorCode) void Session::handleWriteData(FileWrapper::SP fileWrapper_sp,
const boost::system::error_code& errorCode)
{ {
if(!errorCode) if(!errorCode)
{ {
startWriteData(); startWriteData(fileWrapper_sp);
} }
else if(errorCode == boost::asio::error::eof) else if(errorCode == boost::asio::error::eof)
{ {
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include <Configuration.h> #include <Configuration.h>
#include <ProtocolManager.h> #include <ProtocolManager.h>
#include <DBManager.h> #include <DBManager.h>
#include <FileWrapper.h>
#include <tango.h> #include <tango.h>
...@@ -64,9 +65,10 @@ protected: ...@@ -64,9 +65,10 @@ protected:
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Protected] Write data methods // [Protected] Write data methods
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
virtual void startWriteData() = 0; virtual void startWriteData(FileWrapper::SP) = 0;
virtual void handleWriteData(const boost::system::error_code&); virtual void handleWriteData(FileWrapper::SP,
const boost::system::error_code&);
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// [Protected] Encode decode header methods // [Protected] Encode decode header methods
...@@ -97,13 +99,6 @@ protected: ...@@ -97,13 +99,6 @@ protected:
//Address and port of remote endpoint //Address and port of remote endpoint
std::string m_remoteEndpoint; std::string m_remoteEndpoint;
//TODO: to delete
const int BUFFER_SIZE = 1024;
std::ifstream m_inputStream;
int m_inputStreamSize;
}; };
} //End of namespace } //End of namespace
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment