00001 /* 00002 * ClientHandler.h 00003 * 00004 * Created on: 24.06.2009 00005 * Author: morgenro 00006 */ 00007 00008 #ifndef CLIENTHANDLER_H_ 00009 #define CLIENTHANDLER_H_ 00010 00011 #include "core/AbstractWorker.h" 00012 #include "ibrdtn/streams/StreamConnection.h" 00013 #include "ibrdtn/streams/StreamContactHeader.h" 00014 #include "ibrcommon/net/tcpstream.h" 00015 #include "core/EventReceiver.h" 00016 #include "net/GenericServer.h" 00017 #include <memory> 00018 00019 using namespace dtn::streams; 00020 00021 namespace dtn 00022 { 00023 namespace daemon 00024 { 00025 class ClientHandler : public dtn::net::GenericConnection, public dtn::streams::StreamConnection::Callback, public ibrcommon::JoinableThread 00026 { 00027 public: 00028 ClientHandler(ibrcommon::tcpstream *stream); 00029 virtual ~ClientHandler(); 00030 00031 void iamfree(); 00032 bool free(); 00033 00034 bool isConnected(); 00035 virtual void shutdown(); 00036 00037 virtual void eventShutdown(); 00038 virtual void eventTimeout(); 00039 virtual void eventError(); 00040 virtual void eventConnectionDown(); 00041 virtual void eventConnectionUp(const StreamContactHeader &header); 00042 00043 virtual void eventBundleRefused(); 00044 virtual void eventBundleForwarded(); 00045 virtual void eventBundleAck(size_t ack); 00046 00047 friend ClientHandler& operator>>(ClientHandler &conn, dtn::data::Bundle &bundle); 00048 friend ClientHandler& operator<<(ClientHandler &conn, const dtn::data::Bundle &bundle); 00049 00050 const dtn::data::EID& getPeer() const; 00051 00052 protected: 00053 void received(const dtn::streams::StreamContactHeader &h); 00054 void run(); 00055 00056 private: 00057 ibrcommon::Mutex _freemutex; 00058 bool _free; 00059 bool _running; 00060 dtn::data::EID _eid; 00061 00062 auto_ptr<ibrcommon::tcpstream> _stream; 00063 dtn::streams::StreamConnection _connection; 00064 StreamContactHeader _contact; 00065 00066 ibrcommon::ThreadSafeQueue<dtn::data::Bundle> _sentqueue; 00067 size_t _lastack; 00068 }; 00069 } 00070 } 00071 #endif /* CLIENTHANDLER_H_ */
1.6.3