MADARA  3.2.3
Fragmentation.h
Go to the documentation of this file.
1 #ifndef _MADARA_FRAGMENTATION_HEADER_H_
2 #define _MADARA_FRAGMENTATION_HEADER_H_
3 
13 #include <map>
14 #include <string>
15 #include <string.h>
16 #include "madara/utility/StdInt.h"
17 #include "madara/MadaraExport.h"
19 
20 namespace madara
21 {
22  namespace transport
23  {
24  #define FRAGMENTATION_MADARA_ID "KFRG1.3"
25 
48  class MADARA_EXPORT FragmentMessageHeader : public MessageHeader
49  {
50  public:
51 
56 
60  virtual ~FragmentMessageHeader ();
61 
67  virtual uint32_t encoded_size (void) const;
68 
74  static uint32_t static_encoded_size (void);
75 
80  static uint32_t get_updates (const char * buffer);
81 
90  virtual const char * read (const char * buffer,
91  int64_t & buffer_remaining);
92 
96  void operator= (MessageHeader & header);
97 
106  virtual char * write (char * buffer, int64_t & buffer_remaining);
107 
113  virtual bool equals (const MessageHeader & other);
114 
119  static inline bool fragment_message_header_test (const char * buffer)
120  {
121  return strncmp (&(buffer[8]), FRAGMENTATION_MADARA_ID, 7) == 0;
122  }
123 
124  uint32_t update_number;
125  };
126 
130  typedef std::map <uint32_t, const char *> FragmentMap;
131 
135  typedef std::map <uint64_t, FragmentMap> ClockFragmentMap;
136 
140  typedef std::map <
141  std::string, ClockFragmentMap> OriginatorFragmentMap;
142 
157  MADARA_EXPORT char * add_fragment (const char * originator, uint64_t clock,
158  uint32_t update_number, const char * fragment,
159  uint32_t queue_length,
160  OriginatorFragmentMap & map, bool clear = true);
161 
168  MADARA_EXPORT char * defrag (FragmentMap & map);
169 
174  MADARA_EXPORT void delete_fragments (FragmentMap & map);
175 
182  MADARA_EXPORT void frag (
183  const char * source, uint32_t fragment_size, FragmentMap & map);
184 
192  MADARA_EXPORT bool is_complete (const char * originator, uint64_t clock,
193  OriginatorFragmentMap & map);
194 
203  MADARA_EXPORT bool exists (const char * originator, uint64_t clock,
204  uint32_t update_number, OriginatorFragmentMap & map);
205  }
206 }
207 
208 #endif // _MADARA_FRAGMENTATION_HEADER_H_
MADARA_EXPORT char * add_fragment(const char *originator, uint64_t clock, uint32_t update_number, const char *fragment, uint32_t queue_length, OriginatorFragmentMap &map, bool clear=true)
Adds a fragment to an originator fragment map and returns the aggregate message if the message is com...
MADARA_EXPORT char * defrag(FragmentMap &map)
Pieces together a fragment map into a single buffer.
MADARA_EXPORT bool is_complete(const char *originator, uint64_t clock, OriginatorFragmentMap &map)
Breaks a large packet into smaller packets.
#define FRAGMENTATION_MADARA_ID
Definition: Fragmentation.h:24
Defines a fragmentation header which allows for multi-part messages that are only applied once all fr...
Definition: Fragmentation.h:48
static bool fragment_message_header_test(const char *buffer)
Tests the buffer for a reduced message identifier.
std::map< std::string, ClockFragmentMap > OriginatorFragmentMap
Map of originator to a map of clocks to fragments.
std::map< uint64_t, FragmentMap > ClockFragmentMap
Map of clocks to fragments.
static struct madara::knowledge::tags::string_t string
MADARA_EXPORT void delete_fragments(FragmentMap &map)
Deletes fragments within a fragment map and clears the map.
MADARA_EXPORT bool exists(const char *originator, uint64_t clock, uint32_t update_number, OriginatorFragmentMap &map)
Checks if a fragment already exists within a fragment map.
std::map< uint32_t, const char * > FragmentMap
Map of fragment identifiers to fragments.
Copyright (c) 2015 Carnegie Mellon University.
Defines a robust message header which is the default for KaRL messages.
Definition: MessageHeader.h:57
MADARA_EXPORT void frag(const char *source, uint32_t fragment_size, FragmentMap &map)
Breaks a large packet into smaller packets.