Helium
frag.h
Go to the documentation of this file.
1 
25 #ifndef FRAG_H
26 #define FRAG_H
27 
28 #include <stddef.h>
29 #include <time.h>
30 
31 #define MAX_FRAGMENT_ENTRIES 65536
32 
33 // Forward declarations
34 typedef struct he_conn he_conn_t;
36 
37 // Information of a fragment
38 typedef struct he_fragment_entry_node {
39  uint16_t begin;
40  uint16_t end;
41  bool last_frag;
44 
45 // An entry of the fragment table
46 typedef struct he_fragment_entry {
47  uint8_t data[HE_MAX_WIRE_MTU];
48  time_t timestamp;
49  // Linked list contains infomation of received fragments
50  he_fragment_entry_node_t *fragments;
52 
53 // Fragment table for reassembling fragments
54 typedef struct he_fragment_table {
55  he_fragment_entry_t **entries;
56  size_t num_entries;
58 
68  uint16_t length, uint16_t frag_size);
69 
75 
87 int he_fragment_entry_update(he_fragment_entry_t *entry, uint8_t *data, uint16_t offset,
88  size_t length, uint8_t mf, bool *assembled);
89 
99 
109 
115 void he_internal_fragment_table_delete(he_fragment_table_t *tbl, uint16_t frag_id);
116 
122 
123 #endif // FRAG_H
he_fragment_entry_reset
void he_fragment_entry_reset(he_fragment_entry_t *entry)
Reset the given fragment entry.
Definition: frag.c:86
he_fragment_entry
Definition: frag.h:46
he_return_code_t
enum he_return_code he_return_code_t
All possible return codes for helium.
he_internal_fragment_table_destroy
void he_internal_fragment_table_destroy(he_fragment_table_t *tbl)
Destroy the given he_fragment_table and free up all memory.
Definition: frag.c:236
he_internal_fragment_table_find
he_fragment_entry_t * he_internal_fragment_table_find(he_fragment_table_t *tbl, uint16_t frag_id)
Find entry for the given fragment id.
Definition: frag.c:206
he_internal_frag_and_send_message
he_return_code_t he_internal_frag_and_send_message(he_conn_t *conn, uint8_t *packet, uint16_t length, uint16_t frag_size)
Fragment a packet and send it over the secured tunnel as multiple messages.
Definition: frag.c:28
he_fragment_entry_node
Definition: frag.h:38
he_fragment_entry_update
int he_fragment_entry_update(he_fragment_entry_t *entry, uint8_t *data, uint16_t offset, size_t length, uint8_t mf, bool *assembled)
Update the given fragment entry with a new fragment.
Definition: frag.c:100
he_internal_fragment_table_delete
void he_internal_fragment_table_delete(he_fragment_table_t *tbl, uint16_t frag_id)
Delete entry from the fragment table.
Definition: frag.c:223
he_internal_fragment_table_create
he_fragment_table_t * he_internal_fragment_table_create(size_t num_entries)
Create and initialize a new fragment table.
Definition: frag.c:188
he_conn
Definition: he_internal.h:170
he_fragment_table
Definition: frag.h:54
HE_MAX_WIRE_MTU
#define HE_MAX_WIRE_MTU
Default MTU sizes.
Definition: he.h:41