Allow serializing SM state
It is useful in some applications to get a snapshot of the stream management state for storage outside the process, in order to recover from crashes and other things. The get_sm_state already present is not suitable for this because it returns a live object tied in to the current context and such, and containing much unneeded internal-api data. Introduce xmpp_sm_state_set_callback which is called every time the state changes with a serialized state, and a dual xmpp_sm_state_restore which takes in this serialized state and sets up a new sm_state based on that. The serialization is considered opaque from the PoV of the API, but is based on CBOR to facilitate easy debugging.
This commit is contained in:
committed by
Steffen Jaeckel
parent
5690c4ed89
commit
f3fa9f557b
@@ -1232,6 +1232,7 @@ static void _sm_enable(xmpp_conn_t *conn)
|
||||
send_stanza(conn, enable, XMPP_QUEUE_SM_STROPHE);
|
||||
conn->sm_state->sm_sent_nr = 0;
|
||||
conn->sm_state->sm_enabled = 1;
|
||||
trigger_sm_callback(conn);
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -1486,6 +1487,8 @@ static int _handle_sm(xmpp_conn_t *const conn,
|
||||
name = NULL;
|
||||
}
|
||||
|
||||
trigger_sm_callback(conn);
|
||||
|
||||
err_sm:
|
||||
if (!name) {
|
||||
char *err = "Couldn't convert stanza to text!";
|
||||
|
||||
Reference in New Issue
Block a user