summaryrefslogtreecommitdiff
path: root/libs/libaxolotl/src/session_record.c
diff options
context:
space:
mode:
authorGluzskiy Alexandr <sss@sss.chaoslab.ru>2018-04-24 12:01:36 +0300
committerGluzskiy Alexandr <sss@sss.chaoslab.ru>2018-04-24 12:01:36 +0300
commit0b1150d20f49eb0ec82b57ab3fac727f346c0da0 (patch)
tree387c1d63df86419dd92f2c6adef701567c6bf91f /libs/libaxolotl/src/session_record.c
parent0998b447f51c40d2300db7f673e080de20e8f0be (diff)
libs:
updated libsignal-c protocols: jabber: omemo: used 31bit device id instead of 32bit (32bit conflicts with conversations, not xep compliant)
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);
}