00001 // -*- C++ -*- 00002 /* 00003 * File: Serializer.h 00004 * Author: morgenro 00005 * 00006 * Created on 30. Mai 2010, 15:31 00007 */ 00008 00009 #ifndef _SERIALIZER_H 00010 #define _SERIALIZER_H 00011 00012 #include <iostream> 00013 #include "ibrdtn/data/Dictionary.h" 00014 #include "ibrdtn/data/PrimaryBlock.h" 00015 #include "ibrdtn/data/Exceptions.h" 00016 00017 namespace dtn 00018 { 00019 namespace data 00020 { 00021 class Bundle; 00022 class Block; 00023 class PrimaryBlock; 00024 00025 class Serializer 00026 { 00027 public: 00028 virtual ~Serializer() {}; 00029 00030 virtual Serializer &operator<<(const dtn::data::Bundle &obj) = 0; 00031 virtual Serializer &operator<<(const dtn::data::PrimaryBlock &obj) = 0; 00032 virtual Serializer &operator<<(const dtn::data::Block &obj) = 0; 00033 00034 virtual size_t getLength(const dtn::data::Bundle &obj) const = 0; 00035 virtual size_t getLength(const dtn::data::PrimaryBlock &obj) const = 0; 00036 virtual size_t getLength(const dtn::data::Block &obj) const = 0; 00037 }; 00038 00039 class Deserializer 00040 { 00041 public: 00042 virtual ~Deserializer() {}; 00043 00044 virtual Deserializer &operator>>(dtn::data::Bundle &obj) = 0; 00045 virtual Deserializer &operator>>(dtn::data::PrimaryBlock &obj) = 0; 00046 virtual Deserializer &operator>>(dtn::data::Block &obj) = 0; 00047 }; 00048 00049 class Validator 00050 { 00051 public: 00052 class RejectedException : public dtn::SerializationFailedException 00053 { 00054 public: 00055 RejectedException(string what = "A validate method has the bundle rejected.") throw() : dtn::SerializationFailedException(what) 00056 { 00057 }; 00058 }; 00059 00060 virtual void validate(const dtn::data::PrimaryBlock&) const throw (RejectedException) = 0; 00061 virtual void validate(const dtn::data::Block&, const size_t) const throw (RejectedException) = 0; 00062 virtual void validate(const dtn::data::Bundle&) const throw (RejectedException) = 0; 00063 }; 00064 00065 class AcceptValidator : public Validator 00066 { 00067 public: 00068 AcceptValidator(); 00069 ~AcceptValidator(); 00070 00071 virtual void validate(const dtn::data::PrimaryBlock&) const throw (RejectedException); 00072 virtual void validate(const dtn::data::Block&, const size_t) const throw (RejectedException); 00073 virtual void validate(const dtn::data::Bundle&) const throw (RejectedException); 00074 }; 00075 00076 class DefaultSerializer : public Serializer 00077 { 00078 public: 00079 DefaultSerializer(std::ostream &stream); 00080 DefaultSerializer(std::ostream &stream, const Dictionary &d); 00081 virtual ~DefaultSerializer() {}; 00082 00083 virtual Serializer &operator<<(const dtn::data::Bundle &obj); 00084 virtual Serializer &operator<<(const dtn::data::PrimaryBlock &obj); 00085 virtual Serializer &operator<<(const dtn::data::Block &obj); 00086 00087 virtual size_t getLength(const dtn::data::Bundle &obj) const; 00088 virtual size_t getLength(const dtn::data::PrimaryBlock &obj) const; 00089 virtual size_t getLength(const dtn::data::Block &obj) const; 00090 00091 protected: 00092 void rebuildDictionary(const dtn::data::Bundle &obj); 00093 00094 private: 00095 std::ostream &_stream; 00096 Dictionary _dictionary; 00097 }; 00098 00099 class DefaultDeserializer : public Deserializer 00100 { 00101 public: 00102 DefaultDeserializer(std::istream &stream); 00103 DefaultDeserializer(std::istream &stream, Validator &v); 00104 DefaultDeserializer(std::istream &stream, const Dictionary &d); 00105 virtual ~DefaultDeserializer() {}; 00106 00107 virtual Deserializer &operator>>(dtn::data::Bundle &obj); 00108 virtual Deserializer &operator>>(dtn::data::PrimaryBlock &obj); 00109 virtual Deserializer &operator>>(dtn::data::Block &obj); 00110 00111 private: 00112 std::istream &_stream; 00113 Dictionary _dictionary; 00114 Validator &_validator; 00115 AcceptValidator _default_validator; 00116 }; 00117 } 00118 } 00119 00120 00121 #endif /* _SERIALIZER_H */ 00122
1.5.6