MADARA  3.4.1
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"
18 #include "madara/MadaraExport.h"
20 
21 namespace madara
22 {
23 namespace transport
24 {
25 #define FRAGMENTATION_MADARA_ID "KFRG1.4"
26 
50 class MADARA_EXPORT FragmentMessageHeader : public MessageHeader
51 {
52 public:
57 
61  virtual ~FragmentMessageHeader();
62 
68  virtual uint32_t encoded_size(void) const override;
69 
75  static uint32_t static_encoded_size(void);
76 
81  static uint32_t get_updates(const char* buffer);
82 
91  virtual const char* read(
92  const char* buffer, int64_t& buffer_remaining) override;
93 
97  void operator=(MessageHeader& header);
98 
107  virtual char* write(char* buffer, int64_t& buffer_remaining) override;
108 
114  virtual bool equals(const MessageHeader& other) override;
115 
120  static inline bool fragment_message_header_test(const char* buffer)
121  {
122  return strncmp(&(buffer[8]), FRAGMENTATION_MADARA_ID, 7) == 0;
123  }
124 
129  virtual std::string to_string (void) override;
130 
131  uint32_t update_number;
132  uint64_t total_size;
133 };
134 
138 typedef std::map<uint32_t, utility::ScopedArray<const char>> FragmentMap;
139 
143 typedef std::map<uint64_t, FragmentMap> ClockFragmentMap;
144 
148 typedef std::map<std::string, ClockFragmentMap> OriginatorFragmentMap;
149 
165 MADARA_EXPORT char* add_fragment(const char* originator, uint64_t clock,
166  uint32_t update_number, const char* fragment, uint32_t queue_length,
167  OriginatorFragmentMap& map, uint64_t & total_size, bool clear = true);
168 
176 MADARA_EXPORT char* defrag(FragmentMap& map, uint64_t & total_size);
177 
182 MADARA_EXPORT void delete_fragments(FragmentMap& map);
183 
197 MADARA_EXPORT void frag(
198  const char* source, uint64_t total_size,
199  const char* originator, const char* domain,
200  uint64_t clock,
201  uint64_t timestamp,
202  uint32_t quality, unsigned char ttl,
203  uint64_t fragment_size, FragmentMap& map);
204 
212 MADARA_EXPORT bool is_complete(
213  const char* originator, uint64_t clock, OriginatorFragmentMap& map);
214 
223 MADARA_EXPORT bool exists(const char* originator, uint64_t clock,
224  uint32_t update_number, OriginatorFragmentMap& map);
225 }
226 }
227 
228 #endif // _MADARA_FRAGMENTATION_HEADER_H_
#define FRAGMENTATION_MADARA_ID
Definition: Fragmentation.h:25
Defines a fragmentation header which allows for multi-part messages that are only applied once all fr...
Definition: Fragmentation.h:51
static bool fragment_message_header_test(const char *buffer)
Tests the buffer for a reduced message identifier.
Defines a robust message header which is the default for KaRL messages.
Definition: MessageHeader.h:57
constexpr string_t string
std::map< uint32_t, utility::ScopedArray< const char > > FragmentMap
Map of fragment identifiers to fragments.
MADARA_EXPORT char * add_fragment(const char *originator, uint64_t clock, uint32_t update_number, const char *fragment, uint32_t queue_length, OriginatorFragmentMap &map, uint64_t &total_size, bool clear=true)
Adds a fragment to an originator fragment map and returns the aggregate message if the message is com...
MADARA_EXPORT bool is_complete(const char *originator, uint64_t clock, OriginatorFragmentMap &map)
Breaks a large packet into smaller packets.
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.
MADARA_EXPORT void frag(const char *source, uint64_t total_size, const char *originator, const char *domain, uint64_t clock, uint64_t timestamp, uint32_t quality, unsigned char ttl, uint64_t fragment_size, FragmentMap &map)
Breaks a large packet into smaller packets.
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.
MADARA_EXPORT char * defrag(FragmentMap &map, uint64_t &total_size)
Pieces together a fragment map into a single buffer.
MADARA_EXPORT void delete_fragments(FragmentMap &map)
Deletes fragments within a fragment map and clears the map.
Copyright(c) 2020 Galois.