00001 #include "config.h"
00002
00003 #ifndef NETWORKFRAME_H_
00004 #define NETWORKFRAME_H_
00005
00006 #include <map>
00007 #include <sys/types.h>
00008 #include <stdio.h>
00009 #include <string>
00010
00011 using namespace std;
00012
00013 namespace dtn
00014 {
00015 namespace data
00016 {
00017 class NetworkFrame
00018 {
00019 public:
00023 NetworkFrame();
00024
00030 NetworkFrame(const unsigned char* data, const unsigned int size);
00031
00035 ~NetworkFrame();
00036
00041 NetworkFrame(const NetworkFrame& k);
00042
00047 NetworkFrame(const NetworkFrame* k);
00048
00054 NetworkFrame &operator=(const NetworkFrame &k);
00055
00063 unsigned int append(const unsigned char* data, const unsigned int size);
00064
00071 unsigned int append(const u_int64_t value);
00072
00079 unsigned int append(const int value);
00080
00087 unsigned int append(const unsigned int value);
00088
00095 unsigned int append(const char value);
00096
00103 unsigned int append(const unsigned char value);
00104
00111 unsigned int append(const string value);
00112
00119 unsigned int append(const double value);
00120
00125 map<unsigned int, unsigned int> &getFieldSizeMap();
00126
00131 void setFieldSizeMap(map<unsigned int, unsigned int> mapping);
00132
00137 unsigned char* getData() const;
00138
00143 unsigned int getSize() const;
00144
00150 unsigned int getSize(const unsigned int field) const;
00151
00158 unsigned char* get(const unsigned int field) const;
00159
00165 u_int64_t getSDNV(const unsigned int field) const;
00166
00172 unsigned char getChar(const unsigned int field) const;
00173
00179 string getString(const unsigned int field) const;
00180
00186 double getDouble(const unsigned int field) const;
00187
00193 unsigned int getPosition(const unsigned int field) const;
00194
00201 void set(const unsigned int field, const unsigned char* data, const unsigned int size);
00202
00208 void set(const unsigned int field, const u_int64_t value);
00209
00215 void set(const unsigned int field, const int value);
00216
00222 void set(const unsigned int field, const char value);
00223
00229 void set(const unsigned int field, const string value);
00230
00236 void set(const unsigned int field, const unsigned int value);
00237
00243 void set(const unsigned int field, const unsigned char value);
00244
00250 void set(const unsigned int field, double value);
00251
00257 void set(const unsigned int field, NetworkFrame &data);
00258
00263 void remove(const unsigned int field);
00264
00270 void insert(const unsigned int field);
00271
00277 size_t write(FILE * stream);
00278
00284 void changeSize(unsigned int field, unsigned int size);
00285
00286 #ifdef DO_DEBUG_OUTPUT
00287 void debug() const;
00288 #endif
00289
00293 void updateSize();
00294
00295 protected:
00296 NetworkFrame(unsigned char* data, unsigned int size, map<unsigned int, unsigned int> fieldsizes);
00297
00298 private:
00299 unsigned char* m_data;
00300
00304 map<unsigned int, unsigned int> m_fieldsizes;
00305
00309 unsigned int m_size;
00310
00317 void moveData(unsigned char* data, unsigned int size, int offset);
00318
00319 #ifdef DO_DEBUG_OUTPUT
00320 void debugData(unsigned char* data, unsigned int size) const;
00321 #endif
00322 };
00323 }
00324 }
00325
00326 #endif