summaryrefslogtreecommitdiff
path: root/libs/libaxolotl/src/session_record.c
diff options
context:
space:
mode:
Diffstat (limited to 'libs/libaxolotl/src/session_record.c')
-rw-r--r--libs/libaxolotl/src/session_record.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/libs/libaxolotl/src/session_record.c b/libs/libaxolotl/src/session_record.c
index 0f72e90f83..e5ed577b37 100644
--- a/libs/libaxolotl/src/session_record.c
+++ b/libs/libaxolotl/src/session_record.c
@@ -23,6 +23,7 @@ struct session_record
session_state *state;
session_record_state_node *previous_states_head;
int is_fresh;
+ signal_buffer *user_record;
signal_context *global_context;
};
@@ -239,6 +240,7 @@ complete:
int session_record_copy(session_record **record, session_record *other_record, signal_context *global_context)
{
int result = 0;
+ session_record *result_record = 0;
signal_buffer *buffer = 0;
size_t len = 0;
uint8_t *data = 0;
@@ -254,15 +256,28 @@ int session_record_copy(session_record **record, session_record *other_record, s
data = signal_buffer_data(buffer);
len = signal_buffer_len(buffer);
- result = session_record_deserialize(record, data, len, global_context);
+ result = session_record_deserialize(&result_record, data, len, global_context);
if(result < 0) {
goto complete;
}
+ if(other_record->user_record) {
+ result_record->user_record = signal_buffer_copy(other_record->user_record);
+ if(!result_record->user_record) {
+ result = SG_ERR_NOMEM;
+ goto complete;
+ }
+ }
complete:
if(buffer) {
signal_buffer_free(buffer);
}
+ if(result >= 0) {
+ *record = result_record;
+ }
+ else {
+ SIGNAL_UNREF(result_record);
+ }
return result;
}
@@ -419,6 +434,21 @@ static void session_record_free_previous_states(session_record *record)
record->previous_states_head = 0;
}
+signal_buffer *session_record_get_user_record(const session_record *record)
+{
+ assert(record);
+ return record->user_record;
+}
+
+void session_record_set_user_record(session_record *record, signal_buffer *user_record)
+{
+ assert(record);
+ if(record->user_record) {
+ signal_buffer_free(record->user_record);
+ }
+ record->user_record = user_record;
+}
+
void session_record_destroy(signal_type_base *type)
{
session_record *record = (session_record *)type;
@@ -428,5 +458,9 @@ void session_record_destroy(signal_type_base *type)
}
session_record_free_previous_states(record);
+ if(record->user_record) {
+ signal_buffer_free(record->user_record);
+ }
+
free(record);
}