diff options
author | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2018-04-24 12:01:36 +0300 |
---|---|---|
committer | Gluzskiy Alexandr <sss@sss.chaoslab.ru> | 2018-04-24 12:01:36 +0300 |
commit | 0b1150d20f49eb0ec82b57ab3fac727f346c0da0 (patch) | |
tree | 387c1d63df86419dd92f2c6adef701567c6bf91f /libs/libaxolotl/src/session_record.c | |
parent | 0998b447f51c40d2300db7f673e080de20e8f0be (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.c | 36 |
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); } |